LINUX.ORG.RU

Проблема с FIFO


0

0

Проблема в следующем, моя прога подключается в блокирующем режиме к FIFO на чтение. Другая в таком-же на запись.

Все работает замечательно, пока другая программа не переоткрывает файл-(FIFO). Простенькой диагностикой стало понятно, что моя программа получает eof т.е. канал кончился :( И тут программа срывается перестает ждать пока появятся данные, начинает гонять (считывать) пустоту. И это не заканчивается, даже после подключения на запись снова другой программы.

Единственное работоспособное решение пока, рестарт демона (т.е. моей проги) - тогда сразу все нормализуется. Но это потерянное время и в общем ненормально.

Пробовал сбрасывать eofbit, пробовал даже закрывать файл и открывать снова. Ничего не помогает. Пишет состояние eof и все. Открываю и считываю данные потоками ifstream.

Заранее благодарен.

> Пробовал сбрасывать eofbit, пробовал даже закрывать файл и открывать снова. Ничего не помогает. Пишет состояние eof и все. Открываю и считываю данные потоками ifstream.

Покажи этот кусочек кода сюда.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

if (!f[2].empty() && !f[3].empty()){
....

} else {
ios::iostate istatus;
istatus = fin.rdstate();
if(istatus & ios::eofbit){
cerr << "Обнаружен конец файла\n";
fin.clear(ios::eofbit);
sleep(5); //для надежности
fin.close();
sleep(5);
ifstream fin(log_path.c_str()); //open for reading
if (!fin) {// Сюда прога не попадает!!!
cerr << "Немогу открыть файл фифо:" << log_path << "\n";
fin.close();
return EXIT_FAILURE;}
}} примерно так

Потом большой цикл заворачиватся, и так до бесконечности, логи растут как на дрожжах

merlin-shadow
() автор топика
Ответ на: комментарий от merlin-shadow

> ifstream fin(log_path.c_str()); //open for reading

создаешь новый объект, который в конце итерации уничтожается.

Может ты хотел: fin.open(log_path.c_str()) ?

kosmonavt
()
Ответ на: комментарий от kosmonavt

Да именно в этом и была проблема!!! Вродебы мелочь, а я уже думал что проблема нерешаема. Большое спасибо, был бы ты хотябы в Донецке, поставил бы пиво! ;)

merlin-shadow
() автор топика
Ответ на: комментарий от merlin-shadow

Ну, если нужен человек для пива (читай - собутыльник) из Донецка, то я вполне подхожу... :))

Dmitry_Panoff
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.