各种用户正在浏览100%用C(CGI)编程的网站 . 每个网页都使用fopen / fgets / fread从文件中读取常用数据(如导航栏) . 如果各种各样的人浏览同一页面,每次打电话给fopen / fgets / fread会互相干扰吗?如果是这样,如何在C中解决? (这是一个Linux服务器,编译是用gcc完成的,这是用C编程的CGI网站 . )
例:
FILE *DATAFILE = fopen(PATH, "r");
if ( DATAFILE != NULL )
{
while ( fgets( LINE, BUFFER, DATAFILE ) )
{
/* do something */
}
}
3 回答
在Linux上,多个进程同时从文件读取是完全安全的 .
从多个过程(在任何现代系统中)读取是完全安全的 .
对fopen()的调用返回一个指向FILE结构的指针,该结构有自己的成员,如标志,当前位置等 .
您应该只关心有人更改文件(例如:缩小),而其他人正在阅读它 . 但我想这不是你的情况 .
来自文件的并发 reads (无论是来自多个线程 - 假设来自单独打开的描述符 - 还是来自多个进程)在所有现代主要操作系统上都是明确定义和允许的 . 它只是一个文件的并发 writes ,这个文件是不明确的,你不应该在没有锁定的情况下尝试这样做(除非你附加到文件,如日志,并且操作系统使得这样的并发写入定义明确) .