C中的fopen / fread / fgets是否是PID安全的?

时间:2010-04-12 23:46:00

标签: c web cgi fread fgets

各种用户正在浏览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 个答案:

答案 0 :(得分:5)

在Linux上,多个进程同时从文件中读取是完全安全的。

答案 1 :(得分:3)

从多个过程(在任何现代系统中)读取是完全安全的。

对fopen()的调用返回一个指向FILE结构的指针,该结构有自己的成员,如标志,当前位置等。

你应该只关心有人更改文件(例如:缩小),而其他人正在阅读它。但我想这不是你的情况。

答案 2 :(得分:2)

来自文件的并发读取(无论是来自多个线程 - 假设来自单独打开的描述符 - 还是来自多个进程)在所有现代主要操作系统上都是明确定义和允许的。它只是并发写入到一个定义不明确的文件,你不应该在没有锁定的情况下尝试这样做(除非你附加到文件,如日志,并且操作系统进行这样的并发写入明确定义的)。