我想要做的事情:
1.由进程1创建并打开in.fifo文件以进行写入
2.在进程2中打开in.fifo文件以进行读取
3.由进程1将来自cin的行写入in.fifo文件
4.由进程2读取并输出行
5.当输入"exit"到cin(进程2)时,关闭文件in.fifo,删除它并退出
6.因为in.fifo没有写入者,所以进程2退出
在我的程序中,进程2没有退出。在c语言中,当O_NONBLOCK被清除时,使用read和write可以实现该功能,但我想在c++中实现它。
write.cpp:
#include <stdlib.h>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main(){
std::ofstream fifo;
fifo.open("/home/fedor/projects/fifo2/in",ios::out);
if(! fifo.is_open() ){
std::cout << " error : cannot open file " << std :: endl;
return 1;
}
std::cout << " file open " << std :: endl;
std::string line;
while (line.compare("exit") != 0 ){
std::getline(cin, line);
fifo << line << endl;
/* do stuff with line */
}
fifo.close();
remove("/home/fedor/projects/fifo2/in");
return 0;
}
read.cpp:
#include <stdlib.h>
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main(){
std::ifstream fifo;
fifo.open("/home/fedor/projects/fifo2/in",ifstream::in);
if(! fifo.is_open() ){
std::cout << " error : cannot open file " << std :: endl;
return 1;
}
std::cout << " file open " << std :: endl;
std::string line;
bool done = false;
while (!done)
{
while (std::getline(fifo, line))
{
cout << line << endl;
/* do stuff with line */
}
if (fifo.eof())
{
fifo.clear(); // Clear the EOF bit to enable further reading
}
else
{
done = true;
}
}
return 0;
}
我找不到有关像http://linux.die.net/man/3/read中阻塞读取流的相关内容。
如果process2在输入“exit”后关闭,就像process1一样,那么它是一个死锁吗?(它是在阻塞读取,还是一直尝试读取)