C prog: после добавления файла читать еще вернуть 0 - PullRequest
1 голос
/ 07 марта 2011

У меня есть новый файл, открытый как чтение / запись, затем 1 поток получит из сети и добавит двоичные данные в этот файл, другой поток будет читать из того же файла для обработки двоичных данных, но read ()всегда возвращаю 0, поэтому я не могу прочитать данные, но если я использую cat в командной строке для добавления данных, тогда программа может читать данные и обрабатывать.Я не знаю, почему он не может заметить новые данные, поступающие из сети.Я использую open (), read () и write () в этой программе.

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Использовать канал вместо HDD-файла. В зависимости от вашей системы (которую вы нам не сообщили) в вашем коде есть только незначительные изменения (которые вы нам не дали).

0 голосов
/ 07 марта 2011

Предполагая, что ваши функции read() и write() являются функциями POSIX, они совместно используют позицию файла, даже если они используются в разных потоках. Таким образом, ваш read после write пытался read после позиции, в которой написано write. Не используйте файл IO для связи между потоками. В большинстве случаев я бы даже не использовал конвейер или сокеты для этого (один контекст, который я бы использовал, это когда поток чтения использует poll/select с другими файловыми дескрипторами), но просто разделяемая память и мьютекс.

0 голосов
/ 07 марта 2011

файловые операции буферизируются. попробуйте промыть поток?

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