linux管道学习笔记.doc声明:本文档所有内容均为网上整理所得,。不用做任何商业用途,仅供广大网友学习交流之用,如有侵权,请联系本人删除,若发现文档中内容有错误或者有个人见解,:.weiming999@。管道无名管道管道包括无名管道和有名管道两种,前者在父子进程中流行,后者由于可以独立成为磁盘文件而存在,,它占用两个文件描述符,不能被非血缘关系的进程共享,,管道也是一种文件,,它返回两个文件描述符:一个文件以只写打开,作为管道的输入端;另一个文件以只读打开,作为管道的输出端.#include<>intpipe(intfildes[2]);函数pipe在内核中创建一个管道,并分配两个文件描述符标识管道的两端,这两个文件描述符存储与fildes[0]和fildes[1][0]描述管道和输出端,进程向此文件描述符中读取数据,fildes[1]描述管道的输入端,[0]:[1]:,否则返回-(输入端和输出端)被一个进程控制没有太大的意义,如果管道的两端分别控制在不同的进程中,,可以向管道发送数据,拥有管道输出端的进程,,,关闭子进程的管道输入端,就形成一个从父进程到子进程的管道流,数据由父进程写入,,,关闭子进程的管道输出端,,从父进程读出.#include<>#include<string>#include<>#include<>intmain(){ pid_tpid; intfildes[2]; charbuf[256]; inti,j; if(pipe(fildes)<0) { printf("pipeerror\n"); return-1; } if((pid=fork())<0) { printf("forkerror!\n"); return-1; } if(0==pid) { //子进程 close(fildes[1]); j=read(fildes[0],buf,sizeof(buf));buf[j]='\0'; printf("[child]length=[%d]buf=[%s]\n",j,buf); return0; } //父进程 close(fildes[0]); write(fildes[1],"Hello",strlen("Hello")); return0;}在进程的通信中,我们无法判断每次通信中报文的字节数,即无法对数据流进行自动拆分,从而发生了子进程一次性读取父进程两次通信的报文,为了能正常拆分发送报文,常常采用以下几种方法:,,转换成数据域的长度,,创建一个通信线路,.#include<>#include<string>#include<>#include<>intmain(){ pid_tpid; intfildes[2]; charbuf[256]; inti,j; if(pipe(fildes)<0) { printf("pipeerror\n"); return-1; } if((pid=fork())<0) { printf("forkerror!\n"); return-1; } if(0==pid) { //子进程 close(fildes[1]); j=read(fildes[0],buf,5); buf[j]='\0'; printf("[child]length=[%d]buf=[%s]\n",j,buf); memset(buf,0,sizeof(buf)); j=read(f
linux管道学习笔记 来自淘豆网m.daumloan.com转载请标明出处.