2014-02-21 1 views
0

Если процесс, в котором для создания файла и закрывает его:Права доступа к файлу для процесса в C

void function_procA (void) { 
    FILE *G_fp = NULL; 

    G_fp = fopen("/var/log/file.log", "w"); 
    fclose(G_fp); 
} 

может другой процесс открыть указатель на этот файл и начать писать на него?

void function_procB (void) { 
    FILE *G_fp = NULL; 

    G_fp = fopen("/var/log/file.log", "w"); 
    fprintf(G_fp, "Hello, World!\n"); 
    fclose(G_fp); 
} 

Вкратце: какие разрешения для файлов между различными процессами? И если только один процесс получает эксклюзивное право писать в файл по умолчанию, как изменить права доступа, чтобы другой процесс имел права писать на него?

Спасибо.

+0

На какой операционной системе? – Sulthan

+0

@Sulthan On Linux – OfLettersAndNumbers

ответ

0

Если оба процесса управляются одним и тем же пользователем, он должен работать.

0

Я думаю, this Wikipedia article имеет хорошее описание.

Цитирование:

Unix-подобных операционных систем (включая Linux и Apple, OS X) не обычно автоматически заблокировать открытые файлы или запущенные программы. Несколько типов устройств блокировки файлов доступны в разных вариантах: Unix, и многие операционные системы поддерживают более одного типа для совместимости . Двумя наиболее распространенными механизмами являются fcntl (2) и flock (2). Третий такой механизм - lockf (3), который может быть отдельным или может быть реализован с использованием одного из первых двух примитивов. Хотя некоторые типы блокировок могут быть настроены как обязательные, блокировки файлов под Unix по умолчанию являются рекомендательными. Это означает, что взаимодействующие процессы могут использовать блокировки для координации доступа к файлу среди самих , но отказоустойчивые процессы также могут игнорировать блокировки и получать доступ к файлу любым способом, который они выбирают. Другими словами, блокировки файлов блокируют другие файловые блокировки, а не входы/выходы.

2

Это стало бы расстановкой данных.

можно избежать очень легко с блокировкой файла:

#include <sys/file.h> 

flock(fileno(fp), LOCK_SH); // shared lock for reading 
flock(fileno(fp), LOCK_EX); // exlusive lock 
flock(fileno(fp), LOCK_UN); // release lock 

выше пример не работает на Linux, ни малейшего представления о окнах, хотя. flock - это всего лишь оболочка для системного вызова fcntl.

Смежные вопросы