Чтение и запись из файла в режиме кругового буфера - PullRequest
1 голос
/ 18 сентября 2010

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

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 18 сентября 2010

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

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

0 голосов
/ 18 сентября 2010

Вы также можете рассмотреть использование именованного канала.

0 голосов
/ 18 сентября 2010

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

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

...