我正在尝试在进程内使用命名管道进行通信。 下面是代码在单个进程中使用命名管道
#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