два процесса вызывают open, один «W», другой «r» одновременно.Ошибка происходит? - PullRequest
0 голосов
/ 16 декабря 2011

Предположим, у меня есть вызов процесса A, который вызывает fopen (имя файла, "w");каждую секунду, и записывать в него данные, в то время как процесс B вызывает fopen (имя файла, «r») каждые 0,2 секунды и считывает данные из него !!

В очень редкой ситуации, когда A записывает данные передA закрыть его, B процесс сделать fopen и прочитать данные из него.Я думаю, что это проблема синхронизации!

Использование Mutex легко в потоке, но я не пробовал мьютекс между процессами.Максимальный размер данных составляет всего 400 байт. Я хотел бы знать, каков простой способ избежать процесса записи данных и одновременного чтения другим процессом, или, если один процесс A открывает файл, другой процесс Bдождитесь, пока процесс A закроет файл!

1 Ответ

1 голос
/ 16 декабря 2011

Если вы должны использовать файлы (как сказал @aix, возможно, есть лучшие способы), не пытайтесь читать файлы по мере их записи, иначе результаты будут неопределенными.

Вместо этого запишите данные в другое имя файла, закройте их, а затем переместите в нужное место (в Linux используйте rename()).

Если вам это не нравится, попробуйте использоватьфайловые блокировки.В Linux, по крайней мере, они на самом деле не препятствуют доступу к файлу, они просто действуют как межпроцессные мьютексы.Вы не говорите, какая у вас ОС, но для Linux смотрите man 2 flock.

...