我試圖使用命名管道。我有一個讀取info和另一個將信息寫入管道的進程。命名管道創建
這是我的讀者進程的降低代碼:
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()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkfifo.html)而不是'mknod()'(儘管大約二十年前,你會使用'mknod()',因爲'mkfifo()'不存在)。 – 2011-06-06 04:20:37