繁体   English   中英

打开命名管道的问题

[英]Problem with opening a named pipe

更确切地说,在尝试通过管道发送数据时遇到了一个问题:我没有得到管道的非空文件描述符。 这是创建管道的代码:

//PIPE is defined as a "/tmp/my.fifo"
umask(0);
...
mknod(PIPE,S_IFIFO,0);
...
p=fopen(PIPE,"w");
if (p)
{
    //fprintf(p,"some message");
    fclose(p);
}
else
    printf("Could not open the pipe\n");

这是从管道读取的代码:

cos_pipe = fopen(PIPE,"r");
if (cos_pipe)
{
    fgets(buffer,80,cos_pipe);
    ...
    fclose(cos_pipe);
}
else
{
    printf("Couldn't open the pipe\n");
    usleep(300000);
}

代码被编译成两个分别启动的不同二进制文件。 我得到的所有输出是“无法打开管道”。

关于一些相关的注意事项:创建管道的程序是否应在以后将其删除?

mode参数也需要权限。 使用S_IFIFO|S_IRUSR|S_IWUSR

考虑改用mkfifo函数:

mkfifo(PIPE,S_IRUSR|S_IWUSR)

使用完毕后,应删除管道。 同样,如果一次运行一个以上的程序实例,会发生什么情况-您对管道使用了固定的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM