一、管道的分類
- 無名管道:只能應用在有親緣關係的進程中,不提供原子操作,且爲半雙工方式,只能一端讀或者一端寫。如果需要達到全雙工的方式,則需要創建兩個無名管道。
- 有名管道:可以應用在任意進程中,會創建對應的管道文件,提供原子操作,爲半雙工方式。
二、管道的相關函數
1、無名管道的創建:
- int pipe(int pipefd[2]);
- 其中:pipefd[0]存放的爲讀取端的文件描述符、pipefd[1]存放的爲寫端的文件描述符
- 將得到的文件描述符,通過像文件IO一樣進行數據的讀寫
2、有名管道的創建(不能重複創建,創建前需要判斷管道是否存在):
- int mkfifo(const char *pathname, mode_t mode);
- int access(const char *pathname, int mode);//判斷對應管道是否存在
- 當創建了有名管道後,對有名管道的操作與文件IO的操作類似
三、管道使用的一般步驟