0

我有一个检查管道是否存在的程序,所以在函数中写了这个:

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: signal SIGSTOP 虽然它只用 fd2= open("sendd", O_RDONLY); 我不知道为什么它会给出这个错误?我是 linux 管道的新手。

4

1 回答 1

2

RTFM, http: //linux.die.net/man/3/mkfifo

一旦你以这种方式创建了一个 FIFO 特殊文件,任何进程都可以打开它进行读取或写入,就像普通文件一样。但是,它必须同时在两端打开,然后才能继续对其进行任何输入或输出操作。打开一个 FIFO 进行读取通常会阻塞,直到某个其他进程打开同一个 FIFO 进行写入,反之亦然。

于 2013-08-16T08:59:51.603 回答