открыть два процесса - PullRequest
       7

открыть два процесса

0 голосов
/ 04 декабря 2009

Допустимо ли, чтобы два процесса записывали в один и тот же файл несколько раз за определенный промежуток времени, используя функции fopen (режим добавления), fprintf, fclose. они ждут данных и повторяют операцию открытия, записи, закрытия.

есть ли вероятность того, что данные не будут записаны?

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Если ваши два процесса обращаются к одному и тому же файлу, вы должны использовать Mutex , чтобы предотвратить одновременную запись в файл обоими процессами.

Ссылка выше для платформ Windows. Для других платформ вам понадобится соответствующая конструкция платформы, такая как мьютекс pthreads, созданный с помощью PTHREAD_PROCESS_SHARED.

1 голос
/ 04 декабря 2009

Если вы не в Windows, самый простой способ среди взаимодействующих процессов - использовать flock . (Используйте fdopen , чтобы получить ФАЙЛ из fd.)

1 голос
/ 04 декабря 2009

Функция fopen() открывает файл без защиты общего доступа (SH_DENYNO), по крайней мере, в Win32 / VC ++, поэтому без какого-либо протокола блокировки вы потенциально повредите файл.

Если ваше приложение Win32, вы можете использовать CreateFile API для определения режимов обмена. Функция _fsopen() несколько более портативна, но не такая портативная, как fopen().

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