• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Onway

            我是一只菜菜菜菜鳥...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            APUE第十五章進程間通訊 筆記

            Posted on 2011-12-31 15:55 Onway 閱讀(411) 評論(0)  編輯 收藏 引用 所屬分類: 使用說明
            2011-12-21 第十五章 進程間通訊
            第一節 引言
            1,過去,UNIX系統IPC是各種進程通訊方式的統稱。
            2,套接字和STREAMS是僅有的兩種支持不同主機上各個進程間IPC的類型。

            第二節 管道
            1,管道使用例程:
            int main()
            {
            int n,fd[2];
            pid_t pid;
            char line[MAXLINE];

            if(pipe(fd) < 0)
            err_sys("pipe error");
            if(pid = fork() < 0)
            err_sys("fock error");
            else if(pid > 0){
            close(fd[0]);
            write(fd[1],"hello world\n",12);
            } else {
            close(fd[1]);
            n = read(fd[0],line,MAXLINE);
            write(STDOUT_FILENO,line,n);
            }
            exit(0);
            }

            第三節 popen和pclose函數
            1,這兩個函數實現的操作是:創建一個管道,調用fork產生一個子進程,關閉管道的不使用端,執行一個shell以運行命令,然后等待命令終止。

            第四節 協同進程
            1,當一個程序產生某個過濾程序的輸入,同時又讀取該過濾程序的輸出時,則該過濾程序就成為協同進程。
            2,注意協同進程的IO緩沖方式,以避免死鎖的產生。

            第五節 FIFO
            1,FIFO有時被稱為命名管道。FIFO是一種文件類型。
            2,FIFO有下面兩種用途:
            a,FIFO由shell命令使用以便將數據從一條管道線傳送到另一條,為此無需創建中間臨時文件。
            b,FIFO用于客戶進程-服務器進程應用程序中,以在客戶進程和服務器進程之間傳遞數據。
            3,管道只能用于進程間的線性連接,然而,因為FIFO具有名字,它可以用于非線性連接。

            第六節 XSI IPC
            1,有三種IPC我們稱為XSI IPC,即消息隊列,信號量以及共享存儲器。
            2,以參數key和flag創建IPC結構,返回其標識符,以其引用該IPC結構。
            3,IPC_PRIVATE是鍵,IPC_CREATE和IPC_EXCL是flag的位標志。
            4,XSI IPC為每一個IPC結構設置了一個ipc_perm結構。該結構規定了權限和所有者。
            5,XSI IPC的主要問題是:
            a,IPC結構是在系統范圍內起作用的,沒有訪問計數。
            b,這些IPC結構在文件系統中沒有名字。為了支持它們,不得不增加了十幾條新的系統調用和一些新的命令。
            c,IPC結構不使用文件描述符,不能對它們使用多路轉接IO函數。

            第七節 消息隊列
            1,megget用于創建一個新的消息隊列或打開一個現存的隊列。
            2,msgsnd將數據放到消息隊列中。
            3,msgrcv從消息隊列中取用函數。
            4,msgctl對消息隊列指定執行多種操作。
            5,在新的應用程序中不應當再使用消息隊列。

            第八節 信號量
            1,信號量是一個計數器,用于安排多個進程對共享數據對象的訪問。
            2,一個信號量控制一個共享資源的使用情況。
            3,使用信號量要先創建一個信號量集,調用函數semget。
            4,semctl函數包含了多種信號量的操作。
            5,函數semop自動原子性地執行信號量集合上的操作數組。
            6,雖然記錄鎖慢于信號量,但如果只需鎖一個資源并且不需要使用XSI信號量的所有花銷功能,則寧可使用記錄鎖。理由是使用簡易,且進程終止時系統會處理任何遺留下來的鎖。

            第九節 共享存儲
            1,共享存儲允許兩個或更多進程共享一給定的存儲區。因為數據不需要在客戶進程和服務器之間復制,所以這是最快的一種IPC。
            2,使用共享存儲時需要掌握的唯一竅門是多個進程之間對一給定存儲區的同步訪問。
            3,通常,信號量被用來實現對共享存儲訪問的同步。(記錄鎖也可以)。
            4,調用shmget獲得一個共享存儲標識符。
            5,shmctl對共享存儲段執行多種操作。
            6,共享存儲段創建之后就可以使用shmat連接它的地址空間。
            7,當對共享存儲段的操作已經結束的時候,調用shmdt脫接該段。
            8,使用存儲映射使用/dev/zero的優點是:在調用mmap創建映射區之前,無需存在一個實際文件。其缺點是:只能在相關進程間起作用。另外,對比/dev/zero的更好選擇,還可使用匿名存儲映射。

            第十節 客戶進程-服務器進程屬性
            1,客戶進程和服務器進程的某些屬性會受到它們之間所使用的IPC類型的影響。

            ps:2011年的最后一天算是第一次結束了這一章了。僅限勉強有個概念的程度。
            精品久久人人爽天天玩人人妻| 国产亚洲欧美精品久久久| 草草久久久无码国产专区| 久久久久九九精品影院| 亚洲国产精品综合久久一线| 国产成人精品综合久久久久| 青青热久久综合网伊人| 精品久久久久久久国产潘金莲| 久久精品亚洲一区二区三区浴池| 久久99国产精一区二区三区| 亚洲欧美一级久久精品| 93精91精品国产综合久久香蕉 | 亚洲国产成人久久综合一 | 久久99热精品| 久久精品无码一区二区app| 精品久久久无码人妻中文字幕| 久久无码av三级| 99久久夜色精品国产网站 | 久久AV无码精品人妻糸列| 久久综合九色综合久99| 无码精品久久久天天影视 | 亚洲精品tv久久久久| 久久午夜无码鲁丝片| 亚洲伊人久久综合中文成人网| 品成人欧美大片久久国产欧美| 久久亚洲AV成人无码电影| 久久99热这里只有精品国产| 久久精品亚洲精品国产欧美| 国产精品欧美久久久久无广告| 国产精品一区二区久久| 精品久久久久久无码专区 | 国产亚州精品女人久久久久久 | 亚洲国产婷婷香蕉久久久久久| 91麻精品国产91久久久久| 青青青国产精品国产精品久久久久| 人妻精品久久久久中文字幕69| 漂亮人妻被黑人久久精品| 亚洲狠狠婷婷综合久久久久| 中文字幕久久波多野结衣av| 伊人久久大香线焦AV综合影院| 亚洲色婷婷综合久久|