- 论坛徽章:
- 2
|
关于管道我有几个疑问,还望大家指教。
1. APUE中说“管道只能在具有公共祖先的两个进程之间使用”,为什么?
2. 在一个进程中关闭管道的读端(或写端),另一个进程使用相同的描述符仍可以读(或写),这是为什么?同样的描述符在两个进程中代表什么呢?
3. 在一个进程中,如下的代表为什么没有产生SIGPIPE信号。
close(fd[0]);
close(fd[1]);
printf("fd[0]: %d; fd[1]: %d\n", fd[0], fd[1]);
write(fd[1], "hello world\n", 12);
完整的代码如下:
void sigpipe_cb(int signo)
{
printf("Sig num: %d\n", signo);
}
- void sigpipe_cb(int signo)
- {
- printf("Sig num: %d\n", signo);
- }
- int main()
- {
- int n;
- int fd[2];
- pid_t pid;
- char line[256];
- signal(SIGPIPE, sigpipe_cb);
- if (pipe(fd) < 0)
- return -1;
- printf("fd[0]: %d; fd[1]: %d\n", fd[0], fd[1]);
- if ((pid = fork()) < 0) {
- return -1;
- }
- else if (pid > 0) {
- close(fd[0]);
- close(fd[1]);
- printf("fd[0]: %d; fd[1]: %d\n", fd[0], fd[1]);
- write(fd[1], "hello world\n", 12);
- }
- else {
- close(fd[0]);
- close(fd[1]);
- printf("fd[0]: %d; fd[1]: %d\n", fd[0], fd[1]);
- n = read(fd[0], line, 256);
- write(1, line, n);
- }
- exit(0);
- }
复制代码 |
|