1. 程式人生 > >作業系統(二):pipe(),程序通訊機制

作業系統(二):pipe(),程序通訊機制

一、前言

上一節中,我們瞭解了程序的概念,理解了程序的建立機制,尤其是fork函式,也瞭解了程序的三種狀態。今天,我們將瞭解一下程序間的通訊機制。

二、 管道

1、定義

管道:程序間通訊的一種機制。就是將一個程序的輸出作為另一個程序的輸入。C語言中用pipe()函式實現,linux中用 | 實現。

2、例項。

我們這次直接通過一個例子來理解管道pipe()函式。程式碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    int pfds[2];

    if ( pipe(pfds) == 0 )
    {

        if ( fork() == 0 )
        {

            close(1);
            dup2( pfds[1], 1 );
            close( pfds[0] );
            execlp( "ls", "ls", "-1", NULL );

        }
        else
        {

            close(0);
            dup2( pfds[0], 0 );
            close( pfds[1] );
            execlp( "wc", "wc", "-l", NULL );

        }

    }

    return 0;
}

(1)使用pipe函式時,使用一個數組(長度為2)為引數。然後pipe會建立一個管道。然後返回兩個檔案標示符。分別儲存在pfd[0], pfd[1]中。其中pfd[0]是寫資料的一端。pfd[1]是讀資料的一端。最後如果建立管道成功,則返回0,失敗則返回-1. (2)對每一個程序。0,1,2檔案表示符都是固定的,分別表示標準輸入(鍵盤),標準輸出(顯示屏),標準錯誤輸出(也是顯示屏)。因此上方程式碼在建立pipe時,為管道的分配的檔案識別符號為3和4. (3)我們來看程式碼的流程。首先使用pipe穿件了一個管道,並且給管兩個檔案標示符