我尝试通过管道发送数据时遇到了问题,更确切地说:我没有得到管道的非空文件描述符。 以下是创建管道的代码:
//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);
}
代码被编译成两个不同的工厂,我分别启动。我得到的所有输出都是“无法打开管道”。
在某种程度上相关的说明:创建管道的程序应该在以后删除吗?
答案 0 :(得分:3)
mode
参数也需要权限。使用S_IFIFO|S_IRUSR|S_IWUSR
。
请考虑使用mkfifo
功能:
mkfifo(PIPE,S_IRUSR|S_IWUSR)
完成使用后,您应该移除管道。此外,如果您的程序的多个实例同时运行会发生什么 - 您正在使用管道的固定名称。