程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 【讀書筆記】管道和FIFO

【讀書筆記】管道和FIFO

編輯:關於C語言

管道

  提供一個單路(單向)數據流,可以為兩個不同進程提供進程間的通信手段

#include <unistd.h>

     pipe( fd[]);

  返回兩個文件描述符,fd[0]() 和 fd[1]()

  管道間的通信通常是使用 read 和 write 函數完成的

 

  管道的典型用法:

    首先,由父進程創建一個管道,然後調用fork派生一個自身的副本

    接著,父進程關閉管道的讀端,子進程關閉管道的寫段

    這樣就在父子進程間提供了一個單向數據流

 

  雙管道:

    當需要一個雙向數據流的時候,我們必須創建兩個管道,每個方向一個

    pipe1[], pipe2[( (childpid = Fork()) ==);

 

 

 

 

FIFO

  指代先進先出(first in, first out),是一個單向數據流

  不同於管道的是,每個FIFO有一個路徑名與之關聯,從而允許無親緣關系的進程訪問同一個FIFO,因而也稱"有名管道"。()

#include <sys/types.h><sys/stat.h>

 mkfifo( * pathname, mode_t mode);

  pathname是一個路徑名,也是該FIFO的名字

  mode指文件的權限位

S_IRUSR

S_IWUSR

用戶(屬主)讀

用戶(屬主)寫

S_IRGRP

S_IWGRP

(屬)組成員讀

(屬)組成員寫

S_IROTH

S_IWOTH

其他成員讀

其他成員寫

    常值 FIFO_MODE 在 unpipc.h 中定義:

 FIFE_MODE ( S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH )

 

  與管道不同的是:

    

 FIFO1 "/tmp/fifo.1"
 FIFO2 "/tmp/fifo.2"


( (mkfifo(FIFO1, FILE_MODE) < ) && (errno !=( (mkfifo(FIFO2, FILE_MODE) < ) && (errno !=( (childpid = Fork()) === Open(FIFO1, O_RDONLY, = Open(FIFO2, O_WRONLY, 
    
= Open(FIFO1, O_WRONLY, = Open(FIFO2, O_RDONLY, );

 

 

 

 

 

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