<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    離弦之Ray

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

    父進程和子進程創建雙向管道的實際步驟

    創建管道 1(fd1[0] fd1[1]) 和管道 2(fd2[0] fd2[1])

    Fork

    父進程關閉管道 1 的讀出端( fd1[0]) [MS1] ?

    父進程關閉管道 2 的寫入端( fd2[1]

    子進程關閉管道 1 的寫入端( fd1[1]

    子進程關閉管道 2 的讀出端( fd2[0]


    下面是示例程序:

    #include “unpipe.h”

    void client(int, int) ,server(int, int);

    int main(int argc, char* argv[])

    {

    ?????? int pipe1[2],pipe[2];

    pid_t childpid;

    Pipe(pipe1);

    Pipe(pipe2);

    ?

    if((childpid=fork())==0)

    {

    ?????? Close(pipe1[1])?;

    ?????? Close(pipe2[0])?;

    ?

    ?????? server(pipe1[0],pipe2[1])?;

    ?????? exit(0)?;

    }

    close(pipe1[0])?;

    close(pipe2[1])?;

    client(pipe2[0],pipe1[1])?;

    ?

    waitpid(childpid,NULL,0)?;

    exit(0)?;

    }

    //////////////////client

    void client(int readfd, int writefd)

    {

    ?????? size_t len;

    ssize_t n;

    char? buff[MAXLINE];

    ?

    fgets(buff,MAXLINET,stdin);

    len = strlen(buff);

    if(buff[len-1]==’\n’)

    ?????? len--;

    write(writefd,buff,len);

    while((n=read(readfd,buff,MAXLINE))>0)

    ??????? write(STDOUT_FILENO,buff,n);

    }

    ///////////////////server

    void server(int readfd, int writefd)

    {

    ?????? int fd;

    ?????? ssize_t n;

    ?????? char buff[MAXLINE+1];

    ?

    ?????? if((n=read(readfd,buff,MAXLINE))==0)

    ????????? err_quit(“end-of –file while reading pathname”);

    ?????? if((fd =open(buff,O_RDONLY)<0)){

    sprintf(buff+n,sizeof(buff)-n,”can’t open, %s\n”,strerror(errno));

    n = strlen(buff);

    write(writefd,buff,n);

    }else{

    ?While((n=read(fd,buff,MAXLINE))>0)

    ??????? Write(writefd,buff,n);

    Close(fd);

    }

    }


    Properties of Pipe:

    1) Pipes do not have a name. For this reason, the processes must share a parent process. This is the main drawback to pipes. However, pipes are treated as file descriptors, so the pipes remain open even after fork and exec.

    2) Pipes do not distinguish between messages; they just read a fixed number of bytes. New line (\n) can be used to separate messages. A structure with a length field can be used for message containing binary data.

    3) Pipes can also be used to get the output of a command or to provide input to a command


    ?[MS1] 換句話說就是父進程對管道 1 只能寫,以下可以依此類推。

    posted on 2006-06-14 20:14 離弦之ray的技術天空 閱讀(269) 評論(0)  編輯  收藏 所屬分類: Linux&C

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 中文字幕免费在线| 亚洲成a人无码亚洲成av无码| 风间由美在线亚洲一区| 免费无码肉片在线观看| 亚洲国产午夜精品理论片| 99精品热线在线观看免费视频| 人人狠狠综合久久亚洲婷婷| 在线观看免费视频一区| 亚洲中文字幕无码爆乳AV| 国产黄在线观看免费观看不卡| jizz免费在线影视观看网站| 国产精品无码一区二区三区免费| 亚洲国产精品无码久久九九大片 | 四虎免费影院ww4164h| 亚洲国产精品免费在线观看| jiz zz在亚洲| 免费黄网在线观看| 日韩亚洲综合精品国产| 亚洲国产日韩成人综合天堂| 亚洲黄片手机免费观看| 亚洲AV人无码激艳猛片| 最近免费中文在线视频| 亚洲中文字幕一区精品自拍| 国产免费黄色大片| 中文字幕的电影免费网站| 久久精品国产亚洲av高清漫画| 色老头永久免费网站| 蜜芽亚洲av无码一区二区三区| 亚洲 自拍 另类小说综合图区 | 日韩免费的视频在线观看香蕉| 成年女人免费v片| 羞羞的视频在线免费观看| 亚洲精品无码专区久久久| 99re免费在线视频| 亚洲精品永久在线观看| 亚洲无线观看国产精品| 成年黄网站色大免费全看| 免费看一级高潮毛片| 337p日本欧洲亚洲大胆精品555588| 好吊妞998视频免费观看在线| 成人a毛片免费视频观看|