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 */
    }
}
4

3 回答 3

5

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

于 2010-04-12T23:49:46.460 回答
3

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

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

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

于 2010-04-13T00:03:04.473 回答
2

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

于 2010-04-13T00:41:16.783 回答