【发布时间】:2011-06-06 02:21:26
【问题描述】:
我正在尝试使用命名管道。我有一个读取信息的进程和另一个将信息写入管道的进程。
这是我的阅读器进程的简化代码:
main (int argc, char *argv[]) {
int fd, mkn;
char message[100];
if(unlink("aPipe") == -1) {
perror("Error unlinking:");
}
if((mkn = mknod("aPipe", S_IFIFO, 0)) < 0){
perror("Error mknod:");
}
if(chmod("aPipe", 0660)) {
perror("Error chmod:");
}
if(fd = open("aPipe", O_RDONLY) < 0) {
perror("Error abriendo el PIPE");
}
printf("going to read..\n");
close(fd);
}
但它永远停留在这一行:if(fd = open("aPipe", O_RDONLY) < 0),我真的不明白为什么。
如果你知道哪个手册页说这里发生了什么,请告诉我:)
【问题讨论】:
-
哪个进程负责创建 FIFO:读取器或写入器(或者应该在任何一个启动之前创建)?如果您的阅读器删除了编写器创建的 FIFO,它将在打开时阻塞,因为它的新管道上没有编写器;相反,如果写入器删除了读取器创建的 FIFO,它将在打开时阻塞,因为没有读取器。此外,您应该使用
mkfifo()而不是mknod()(尽管在大约二十年前,您会使用mknod(),因为mkfifo()不存在)。
标签: c unix named-pipes