можно ли использовать функцию flockfile для процесса

#c #multithreading #process

#c #многопоточность #процесс

Вопрос:

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

Спасибо

Ответ №1:

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

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

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

Ответ №2:

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

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

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

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