首页 文章

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

提问于
浏览
0

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

  • 2

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

  • 3

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

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

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

  • 5

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

相关问题