linux IPC的PIPE

一、PIPE(无名管道)

函数原型:

#include <unistd.h>

int pipe(int fd[]);

通常,进程会先调用pipe,接着调用fork,从而创建从父进程到子进程的IPC通道。

linux IPC的PIPE

父进程和子进程之间也可用通过pipe通信。

linux 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 ;
}
上一篇:python with 语句妙用


下一篇:UNIX IPC: POSIX 消息队列 与 信号