打开命名管道时出现问题

时间:2011-04-17 19:16:14

标签: c linux named-pipes

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

//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);
}

代码被编译成两个不同的工厂,我分别启动。我得到的所有输出都是“无法打开管道”。

在某种程度上相关的说明:创建管道的程序应该在以后删除吗?

1 个答案:

答案 0 :(得分:3)

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

请考虑使用mkfifo功能:

mkfifo(PIPE,S_IRUSR|S_IWUSR)

完成使用后,您应该移除管道。此外,如果您的程序的多个实例同时运行会发生什么 - 您正在使用管道的固定名称。