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; }