Являются ли fopen / fread / fgets PID-безопасными в C? - PullRequest
0 голосов
/ 13 апреля 2010

Различные пользователи просматривают веб-сайт, на 100% запрограммированный в C (CGI). Каждая веб-страница использует fopen / fgets / fread для чтения общих данных (например, панелей навигации) из файлов. Будет ли каждый вызов fopen / fgets / fread мешать друг другу, если разные люди просматривают одну и ту же страницу? Если так, как это можно решить в C? (Это сервер Linux, компиляция выполняется с помощью gcc, и это для веб-сайта CGI, запрограммированного на C.)

Пример:


FILE *DATAFILE = fopen(PATH, "r");
if ( DATAFILE != NULL )
{
    while ( fgets( LINE, BUFFER, DATAFILE ) )
    {
        /* do something */
    }
}

Ответы [ 3 ]

5 голосов
/ 13 апреля 2010

В Linux вполне безопасно для нескольких процессов одновременно читать из файла.

3 голосов
/ 13 апреля 2010

Совершенно безопасно читать из нескольких процессов (в любой современной системе).

Вызов fopen () возвращает указатель на структуру FILE, которая имеет свои собственные элементы, такие как флаги, текущая позиция и т. Д.

Вам следует заботиться только о том, чтобы кто-то изменил файл (например, сжал), пока другие читают его. Но я думаю, что это не ваш случай.

2 голосов
/ 13 апреля 2010

Одновременное считывание из файла (будь то из нескольких потоков - если исходить из отдельно открытых дескрипторов - или из нескольких процессов) четко определено и разрешено во всех современных основных операционных системах. Это только одновременная запись в файл, который не определен и который вы не должны пытаться делать без блокировки (если только вы не добавляете файл, например, в журнал, и ОС хорошо выполняет такие одновременные записи -определенный).

...