一、PIPE(无名管道)
函数原型:
#include <unistd.h> int pipe(int fd[]);
通常,进程会先调用pipe,接着调用fork,从而创建从父进程到子进程的IPC通道。
父进程和子进程之间也可用通过pipe通信。
例子,父进程到子进程hello world:
#include "apue.h" int main(void)
{
int n;
int fd[];
pid_t pid;
char line[MAXLINE]; if(pipe(fd) < )
err_sys("pipe error");
if((pid = fork()) < ) {
err_sys("fork error");
} else if (pid > ) {
close(fd[]);
write(fd[], "hello world\n", );
} else {
close(fd[]);
n = read(fd[], line, MAXLINE);
write(STDOUT_FILENO, line, n);
}
exit();
}
二、函数popen和pclose
#include <stdio.h> FILE *open(const char *cmdstring, const char *type); int pclose(FILE *fp);
创建一个管道,fork一个子进程,关闭未使用的管道端,执行一个shell运行命令,然后等待命令终止。
#include "apue.h"
#include <stdio.h> int main()
{
FILE *fp;
char ch, line[]; fp = popen("ls *.c", "r");
if(fp != NULL)
{
while(fgets(line, , fp))
{
printf("line=%s\n", line);
}
} pclose(fp); return ;
}