Linux通信之无名管道

1.管道的创建

#include<unistd.h>

int pipe(int fd[2]);

      一个进程在由pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信。

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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值