В командной строке я использовал mkfifo для создания канала и подтвердил, что файл существует. ls -al
дает:
prw-r--r-- 1 user group 0 Mar 30 11:52 my_pipe
Затем я использую этот код, чтобы попытаться прочитать текст построчно из этого канала:
ifstream pipe("/path/to/my_pipe");
string message;
while(getline(pipe, message) && message != "EXIT")
{
cout << boolalpha << pipe.good() << endl << pipe.eof() << endl << pipe.bad() << endl;
}
cout << boolalpha << pipe.good() << endl << pipe.eof() << endl << pipe.bad() << endl;
Вернувшись в командную строку, я делаю echo "banana" > my_pipe
, а затем существует программа со следующим выводом:
true
false
false
false
true
false
Это будет означать, что поток был в хорошем состоянии после чтения banana
, но что во втором вызове getline
я нажал EOF
и вышел.
Почему я нажал EOF
и что я могу сделать, чтобы поток читался и находился в хорошем состоянии, пока я не прочитал свое специальное сообщение EXIT
?
РЕДАКТИРОВАТЬ:
Выводы:
- Используйте
fstream
вместоifstream
. - По-видимому, на момент написания этой статьи в libc ++ есть ошибка, касающаяся fstream и каналов.