91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中匿名管道的示例分析

發布時間:2021-07-15 11:56:24 來源:億速云 閱讀:161 作者:小新 欄目:編程語言

這篇文章主要介紹linux中匿名管道的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

linux中進程的一種通信方式——匿名管道

pipe函數建立管道

調用pipe函數時在內核中開辟一塊緩沖區(稱為管道)用于通信,它有一個讀端一個寫端,然后通過_pipe參數傳出給用戶程序兩個文件描述符,_pipe[0]指向管道的讀端,_pipe[1]指向管道的寫端。所以管道在用戶程序看起來就像一個打開的文件,通過read(_pipe[0]);或者write(_pipe[1]);向這個文件讀寫數據其實是在讀寫內核緩沖區。pipe函數調用成功返回0,調用失敗返回-1。

1父進程調用pipe開辟管道,得到兩個文件描述符指向管道的兩端。

2. 父進程調用fork創建?進程,那么子進程也有兩個文件描述符指向同一管道。

3. 父進程關閉管道讀端,子進程關閉管道寫端。父進程可以往管道里寫,子進程可以從管道?讀,管道是用環形隊列實現的,數據從寫端流入從讀端流出,這樣就實現了進程間通信

匿名管道間的通信是單向的,并且是、只能是具有血緣關系的進程間通信

#include<stdio.h> 
#include<unistd.h> 
#include<string.h> 
#include<stdlib.h> 
 
int main() 
{ 
  int _pipe[2]; 
  int ret = pipe(_pipe); 
  if (ret < 0) 
  { 
    perror("pipe"); 
    return 1; 
  } 
  pid_t id = fork (); 
  if (id<0) 
  { 
    perror("fork"); 
    return 2; 
  } 
  else if (id == 0) 
  { 
    // child 
    int count =5; 
    close (_pipe[0]); 
    char* msg = "hello bit"; 
    while (count --) 
    { 
      write(_pipe[1],msg,strlen(msg)); 
      sleep(1); 
    } 
    close (_pipe[1]); 
    exit(123); 
  } 
  else  
  { 
    // Father 
    close(_pipe[1]); 
    char buf[128]; 
    while(1) 
    { 
      int count =5; 
      ssize_t s = read ( _pipe[0],buf,sizeof(buf)-1); 
      if (s<0) 
      { 
        perror("read"); 
      } 
      else if(s==0) 
      { 
        printf("write is close\n"); 
        return 2; 
      } 
      else 
      { 
        buf[s] ='\0'; 
        printf ("child >> father: %s\n",buf); 
      } 
      count --; 
      if (count == 0) 
      { 
        close (_pipe[0]); 
        break; 
      } 
    } 
     
    int status = 0; 
    pid_t _wait = waitpid (id, &status,0); 
    if (_wait > 0) 
    { 
      printf("exit code is %d, signal is %d\n", 
          WIFEXITED(status), status & 0xff); 
    } 
 
    } 
     
  return 0; 
}

linux中匿名管道的示例分析

以上是“linux中匿名管道的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郯城县| 永泰县| 平利县| 南澳县| 隆安县| 合肥市| 新巴尔虎左旗| 榆林市| 夏邑县| 兴化市| 维西| 岳西县| 宽城| 邓州市| 江达县| 天长市| 高州市| 兰坪| 乳源| 阿瓦提县| 南昌县| 沂源县| 通榆县| 泽州县| 凤城市| 桐乡市| 榆树市| 永泰县| 乌兰浩特市| 湘阴县| 饶河县| 集贤县| 白朗县| 吉安县| 布尔津县| 舞阳县| 玉树县| 南川市| 芦溪县| 新兴县| 阿克苏市|