1.管道的创建
#include<unistd.h>
int pipe(int fd[2]);
2.管道的读写规则
管道两端可分别用描述字fd[0]以及fd[1]来描述,fd[0]描述的是只读管道,称为管道读端。fd[1]描述的是只写管道,称为管道写端。
3.程序演示
#include
#include
#include
#include
#include
/*
* 功能:通过无名管道实现文件拷贝
*argv[0]为源文件路径名,argv[1]为目标路径名
*/
#define SIZE 1024 //定义缓冲区大小
//错误处理函数
void err_exit(char* msg)
{
printf("%s\n",msg);
exit(EXIT_FAILURE);
}
int main(int argc,char* argv[])
{
if(argc != 3)
err_exit("参数不正确");
int fd[2];//定义管道描述符
if(pipe(fd) == -1)
{
perror("pipe()");
err_exit("分配管道出错!");
}
char buf[SIZE];//缓冲区
ssize_t n;
if(fork() == 0)
{
close(fd[0]);//在子进程中关闭读端
int fdr = open(argv[1],O_RDONLY);
while((n = read(fdr,buf,SIZE)) >0)
{
write(fd[1],buf,n);
}
close(fd[1]);
close(fdr);
exit(EXIT_SUCCESS);
}
close(fd[1]);//在父进程中关闭写端
int fdw = open(argv[2],O_CREAT | O_WRONLY,0666);
while((n = read(fd[0],buf,SIZE)) >0)
{
write(fdw,buf,n);
}
close(fd[0]);
close(fdw);
return 0;
}