Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用FIFO'写入时出错;终端只是挂起没有输出_Linux_G++_Fifo - Fatal编程技术网

Linux 使用FIFO'写入时出错;终端只是挂起没有输出

Linux 使用FIFO'写入时出错;终端只是挂起没有输出,linux,g++,fifo,Linux,G++,Fifo,我尝试使用FIFO在两个进程之间读写,但当我打开FIFO时,它不会打印我给它打印的任何消息,同样,当我向它写入时,它也不会显示任何内容……所以我怎么知道它是否工作?为什么它挂在终端上?它只是不断地接受输入,并没有结束?请帮我这里我认为代码是正确的,但它在这里 int main () { int fd; char buffer[MAX]; char * os; if(mkfifo("oss",0666)<0) { perror("

我尝试使用FIFO在两个进程之间读写,但当我打开FIFO时,它不会打印我给它打印的任何消息,同样,当我向它写入时,它也不会显示任何内容……所以我怎么知道它是否工作?为什么它挂在终端上?它只是不断地接受输入,并没有结束?请帮我这里我认为代码是正确的,但它在这里

int  main ()

{
    int fd;
    char  buffer[MAX];
    char * os;
    if(mkfifo("oss",0666)<0)
    {
        perror("FIFO (named pipe) could not be created.");
        exit(-1);
    }
    else printf("\nPipe has been created...");
    fd=open ("oss", O_WRONLY);
    if (fd <0)
    {
        perror("Could not open named pipe.");
        exit(-1);
    }
    else printf("Pipe has been opened.");
     strcpy(buffer,"please connect :( ");

    if( write (fd,buffer, strlen(buffer)+1) < 0 )
    {
      perror("Error writing to named Pipe (FIFO)");
      exit(-1);
    }
    else 
        printf("Message has been written to pipe.");
int main()
{
int-fd;
字符缓冲区[MAX];
char*os;

if(mkfifo(“oss”,0666)了解FIFO最重要的事情是
open()
syscall会阻塞,直到有人试图为另一个方向打开相同的FIFO

您不能打开FIFO进行写入,在其中写入内容并关闭它,然后再打开它进行读取和检索数据。必须同时打开FIFO进行读取和写入,因为它是一个命名管道

您的程序可能挂线了

fd=open ("oss", O_WRONLY);
因为它正在等待有人打开FIFO进行阅读

我是在编写一个由写入FIFO的命令控制的守护进程时学到这一点的。我花了一天的时间完全困惑不解,然后阅读

man 2 open
这给了我们一个暗示

man 7 fifo
在那里我找到了解决办法