1、匿名管道pipe
匿名管道是半双工的,并且只能在具有公共祖先的两个进程之间使用。通常一个管道由一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了。管道创建时会创建两个文件描述符,其中fd[0]为读而打开,fd[1]为写而打开。
#include "apue.h"
int main()
{
int n;
int fd[2];
pid_t pid;
char line[MAXLINE];
if (pipe(fd) < 0) {
err_sys("pipe error");
}
if ((pid = fork()) < 0) {
err_sys("fork error");
}
else if (pid > 0) {
close(fd[0]);
write(fd[1], "hello world\n", 12);
}
else {
close(fd[1]);
n = read(fd[0], line, MAXLINE);
write(STDOUT_FILENO, line, n);
}
exit(0);
}
2、命名管道FIFO
pipe只能在两个相关的进程之间使用,而命名管道FIFO则可以在两个不相关的进程之间使用,使用的范围更广。 使用FIFO时,首先需要使用mkfifo来创建它,创建之后,可以使用文件的相关函数open、read、write、close等函数像普通文件一样操作这个命名管道。
- 一般情况下