程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第八十九回:C語言實例--使用管道進行進程間通信二)

一起talk C栗子吧(第八十九回:C語言實例--使用管道進行進程間通信二)

編輯:關於C語言

一起talk C栗子吧(第八十九回:C語言實例--使用管道進行進程間通信二)


各位看官們,大家好,上一回中咱們說的是使用管道進行進程間通信的例子,這一回咱們說的例子是:使用管道進行進程間通信,不過使用管道的方式不相同。閒話休提,言歸正轉。讓我們一起talk C栗子吧!

我們在前面章回中介紹了三種管道,這一回我們介紹第二種管道及其使用方法。最主要還是讓大家明白如何使用管道進行進程間的通信。

第二種管道我稱之為入門級管道。在介紹它之前,我們先介紹一個函數:pipe.

pipe函數的原型

int pipe(int file_descriptor[2])
該函數用來創建管道,並且得到兩個文件描述符供我們使用; 該函數只有一個參數,參數為int類型的數組,數組中有兩個元素。兩個元素都是文件描述符; 管道通過第二個元素指向的文件把數據寫入管道,並且通過第一個元素指向的文件從管道中讀取數據; 該函數執行成功時返回0,否則返回-1,並且修改errno的值,不同的值代表不同的錯誤。

pipe函數的使用方法

明白這個函數後,我們接下來介紹入門級管道的使用方法,詳細內容如下:

1.使用pipe函數創建管道,並且得到兩個文件描述符; 2.在子進程中使用write系統調用通過第二個文件描述符向管道中寫入數據; 3.在父進程中使用read系統調用通過第一個文件描述符從管道中讀取數據;

我們接下來使用具體的例子進行說明,下面是詳細的代碼

int main()
{
    char input[] = "IPC by pipe";
    char output[BUFSIZ+1];
    int fd_pipe[2];
    int count = 0;
    int stat_value;
    pid_t pid,pid_res;

    memset(output,'\0',sizeof(output));

    if(pipe(fd_pipe) == 0)     //創建管道
    {
        pid = fork();
        if(pid > 0)
        {
            pid_res = wait(&stat_value);

            if(pid_res > 0)
            {
                count = read(fd_pipe[0],output,BUFSIZ);      //從管道中讀取數據
                printf("father process read %d characters,they are: %s \n",count,output);
            }
        }
        else if(pid == 0)
        {
            count = write(fd_pipe[1],input,strlen(input));  //向管道中寫入數據
            printf("son process write %d characters,they are : %s \n",count,input);
        }
        else
        {
            printf("create process failed \n");
            return 1;
        }
    }

    return 0;
}

從上面的代碼中我們可以看到:

首先是在子進程中使用write向管道中寫入數據,寫入數據是通過第二個文件描述符來實現的。 接著在父進程中使用read從管道中讀取數據,讀取數據是通過第一個文件描述符來實現的。 在父進程中我們還使用了wait來同步進程,以確保子進程向管道中寫入數據後,父進程再從管道中讀取數據。

看官們,正文中就不寫代碼了,詳細的代碼放到了我的資源中,大家可以點擊這裡下載使用。

下面是程序的運行結果,請大家參考

./s                                                        //運行編譯後的程序
son process write 11 characters,they are : IPC by pipe     //子進程向管道中寫入數據
father process read 11 characters,they are: IPC by pipe    //父進程從管道中讀取數據

各位看官,關於使用管道進行進程間通信的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved