<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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲啪啪AV无码片| 99久久精品日本一区二区免费| 最近最好最新2019中文字幕免费| 欧洲黑大粗无码免费| 亚洲AV无码久久精品成人 | 51午夜精品免费视频| 日韩黄色免费观看| 亚洲精品蜜夜内射| 在线看片人成视频免费无遮挡| 亚洲男人电影天堂| 亚洲免费中文字幕| 2020国产精品亚洲综合网| 2021免费日韩视频网| 亚洲欧洲无码一区二区三区| 18国产精品白浆在线观看免费| 亚洲精彩视频在线观看| 最近免费最新高清中文字幕韩国 | 亚洲精品久久无码av片俺去也 | 亚洲国产AV无码专区亚洲AV| h视频在线观看免费| 亚洲精品无码国产| 精品一区二区三区无码免费视频| 亚洲人成在线观看| 精品国产免费人成电影在线观看| 91在线亚洲综合在线| 国产一级理论免费版| 两个人看的www高清免费视频| 亚洲VA成无码人在线观看天堂| 日韩人妻无码精品久久免费一| 亚洲女人初试黑人巨高清| 日韩a级毛片免费视频| 久久久WWW成人免费精品| 91亚洲自偷手机在线观看| 高清国语自产拍免费视频国产| caoporm碰最新免费公开视频 | 91亚洲国产成人久久精品| 亚洲成a人片在线观看老师| 国产精品美女午夜爽爽爽免费| 亚洲国产成人精品无码区二本| 99精品免费视频| 亚洲精品无码午夜福利中文字幕 |