pipe()调用来创建一个新管道。
#include <unistd.h>
int pipe(int filedes[2])
成功的调用pipe()会在数组filedes中返回两个打开的文件描述符:一个表示管道的读取端(filedes[0]),另一个表示管道的写入端(filedes[1])。
事例程序:
演示如何将管道用于父子进程间的通讯——父进程在一个操作中写入数据,子进程在一个操作中一小块一小块地从管道中读取数据。
#include <sys/wait.h>
#include "tlpi_hdr.h"(可删除)
#define BUF_SIZE 10
int main(int argc,char*argv[])
{
int pfd[2];
char buf[BUF_SIZE];
ssize_t numRead;
if(argc != 2|| strcmp(argv[1],"--help") == 0)
printf("%s string\n",argv[0]);
if(pipe(pfd) == -1)
{
printf("pipe");
}
switch(fork()){
case -1:
printf("close - child");
case 0:
if(close(pfd[1])== -1)
printf("close -child");
for(;;)
{
numRead = read(pfd[0],buf,BUF_SIZE);
if(numRead == -1)
printf("read");
if(numRead == 0)
break;
if(write(STDOUT_FILENO,buf,numRead)!=numRead)
printf("child - partial/failed write");
}
write(STDOUT_FILENO,"\n",1);
if(close(pdf[0])==-1)
printf("close");
_exit(EXIT_SUCCESS);
default:
if(close(pfd[0]) == -1)
printf("close-parent");
if(write(pdf[1],argv[1],strlen(argv[1]))!=strlen(argv[1]))
printf("parent-partial/failed write");
if(close(pdf[1]) == -1)
printf("close");
wait(NULL);
exit(EXIT_SUCCESS);
}
}