通过无名管道使父子进程进行通信,父进程读取文件test1.txt的数据并写入管道,子进程读取管道将数据写入test2.txt。
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/fcntl.h>
#define N 128
int main(int argc,const char *argv[])
{
pid_t pid;
int fdr,fdw;
ssize_t nbyte;
int fd[2];
char buf[N]="";
/* 以只读方式打开test1.txt */
if((fdr = open("test1.txt",O_RDONLY)) < 0)
{
perror("open error");
}
/* 以只写方式打开test2.txt,如果没有则创建,有则清空 */
if((fdw = open("test2.txt",O_WRONLY|O_CREAT|O_TRUNC,0664)) < 0)
{
perror("open error");
}
/* 创建一个无名管道 */
if(pipe(fd) < 0)
{
perror("pipe error");
}
/* 创建一个进程 */
pid = fork();
if(pid < 0)
{
perror("fork error");
}
else if(pid == 0)
{ /* 向管道读取数据,并写入test2.txt中 */
while((nbyte = read(fd[0],buf,N)) > 0)
{
write(fdw,buf,nbyte);
}
}
else
{ /* 向test1.txt读取数据并写入管道中 */
while((nbyte = read(fdr,buf,N)) > 0)
{
write(fd[1],buf,nbyte);
}
}
}