我正在嘗試在進程內使用命名管道進行通信。 下面是代碼在單個進程中使用命名管道
#include <stdio.h>
#include <fcntl.h>
#include <signal.h>
void sigint(int num)
{
int fd = open("np", O_WRONLY);
write(fd, "y", 1);
close(fd);
}
main()
{
char ch[1];
int fd;
mkfifo("np", 0666);
signal(SIGINT, sigint);
fd = open("np", O_RDONLY);
read(fd, ch, 1);
close(fd);
printf("%c\n", ch[0]);
return;
}
我想是主阻塞,直到東西寫入到管道。 問題是信號處理程序sigint()在打開管道後也會阻塞。考慮到管道已經打開以便在main()中更早的讀取,這是否應該發生?
這是在正確的軌道上 - 只是在「在同一個線程中運行」部分擴展,'SIGINT'導致'O_RDONLY'的'open'失敗(「中斷系統調用」),然後*然後*執行信號處理程序(在「open」調用返回之前)。 – caf 2010-02-13 07:14:15