我有一个检查管道是否存在的程序,所以在函数中写了这个:
status = mkfifo("recv",0666);
fd1 = open("recv",O_WRONLY);
fd2 = open("sendd", O_RDONLY);
cout<<"we are checking botth bcz we have both read and write in the program------:)";
if(fd1 <0 && fd2 <0)
{
//strerror(errno);
err = 1;// a const for remote
}
else if(fd1 >0 || fd2 >0){
err = 2; // a const for local
}
else{
err = 3; // a const for progrm failure error
cout<<"program has some problems";
}
但每次我运行我的程序时它都会在fd1 = open(“recv”,O_WRONLY)时停止;说Thread1:信号SIGSTOP虽然它只能用fd2 = open(“sendd”,O_RDONLY)正常工作;我不知道为什么它会给出这个错误?我是linux中的新手。
答案 0 :(得分:2)
RTFM,http://linux.die.net/man/3/mkfifo
以这种方式创建FIFO特殊文件后,任何进程都可以打开它进行读取或写入,方式与普通文件相同。但是,它必须在两端同时打开,然后才能继续对其进行任何输入或输出操作。打开FIFO以便正常读取块,直到某个其他进程打开相同的FIFO进行写入,反之亦然。