можно использовать функцию flockfile для процесса - PullRequest
2 голосов
/ 20 октября 2011

Привет всем, я хочу задать вопрос о функции flockfile. Я читал описание и узнал, что она используется в потоках.но я делаю разветвление, что означает, что будет другой процесс, а не потоки. Могу ли я использовать flockfile с другим процессом?

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Функция flockfile блокирует не файл, а структуру данных FILE, которую процесс использует для доступа к файлу.Так что речь идет о представлении в адресном пространстве файла процесса, но не обязательно о самом файле.

Даже в процессе, если у вас есть разные FILE открытые для одного и того же файла, вы можетезаписывать в этот файл одновременно, даже если вы заблокировали каждую из FILE с помощью flockfile.

. Для блокировки самого файла посмотрите на flock и lockf, но будьте осторожнычто правила их эффектов для доступа к файлам через разные потоки одного и того же процесса сложны.

1 голос
/ 20 октября 2011

Эти функции могут использоваться только в одном процессе.

Из документов POSIX :

Таким образом, потоки, совместно использующие потоки stdio с другими потоками, могут использовать flockfile () и funlockfile (), чтобы связывать последовательности операций ввода-вывода, выполняемых одним потоком.

Все остальное на этой странице говорит о взаимном исключении между потоками. Разные процессы будут иметь разные буферы ввода / вывода для файловых потоков, эта блокировка не будет иметь смысла / будет эффективной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...