2、分類:管道可以分為有名管道和無名管道兩類。
3、區別:
(1)有名管道:可以在任意程序之間進行通訊,通訊是雙向的,任意可讀可寫,但同一時間只能一端讀,一端寫。
4、管道的特點:
通訊方式:一、有名管道:全雙工:a可到b,b也可到a,如網路
半雙工:要麼a-->b,要麼b-->a,不可能同時存在
單路通訊:只能a-->b,如廣播)
1、概念:有名管道是在磁碟有乙個管道檔案標識,但是這個管道檔案只會占用乙個inode結點,任何都不會佔據block塊,資料在傳遞過程中會快取到記憶體上
2、如何建立管道檔案???
命令:mkfifo filename 庫函式:int mkfifo();
3、操作:open read write close
命令 mkfifomaina.c函式 int mkfifo(const char *pathname, mode_t mode);
int open(const char *pathname, int flag);
int write(int fd, void *buff, size_t size);
int read(int fd, void *buff, size_t buff_len);
int close(int fd);
#include #include #include #include #include #include int main()
; printf("input: ");
fgets(buff,127,stdin);
if(strncmp(buff,"end", 3)==0)
write(fd,buff, strlen(buff) -1);
} close(fd);
}
mainb.c
#include #include #include #include #include #include int main()
; int n = read(fd,buff,127);
if(n <= 0)
printf("read: %s\n",buff);
} close(fd);
}
只執行a或b都會發生阻塞,只有a,b都發生時才成功執行
注:buff是用於存放要輸出到塊儲存的資料清除緩衝的方法----緩衝區快取
ulimit -a:檢視所有檔案大小
3、核心對管道的記憶體空間管理是以迴圈的方式
有名管道操作注意:二、無名管道1、概念:沒有管道檔案, 借助父子程序共享fork之前開啟的檔案描述符,來實現程序間通訊
2、特點:無名管道只能應用於父子程序之間(有名管道可以使用在任何程序之間)
3、操作:read write close
int pipe(int fds[2]);建立成功後,fds[0] 指向管道的讀端 fds[1]指管道的寫端
Linux程序間通訊 管道
linux程序間通訊機制 1.同一主機程序間通訊機制 unix方式 有名管道fifo 無名管道pipe 訊號signal systemv方式 訊號量 訊息佇列 共享記憶體 2.網路通訊 rpc remote procedure call socket 管道管道是程序間通訊中最古老的方式,它包括無名管...
Linux程序間通訊 管道
管道 管道是一種最基本的程序間通訊機制,由pipe函式建立 include intpipe int filedes 2 呼叫pipe函式時在核心中開闢一塊緩衝區 稱為管道 用於通訊,它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程式兩個檔案描述符,filedes 0 指向管道的讀端,f...
Linux 程序間通訊 管道
程序間通訊 a程序怎樣將 hello world 傳遞給b程序 i 利用檔案實現 需要乙個 中間人 進行傳遞 檔案 在磁碟中儲存 a先呼叫open函式開啟檔案,再用write函式寫檔案,b用read函式讀取檔案,但問題如下 1.如果a傳送了資料b進行了接收,但a的資料沒有被清空 2.如果a傳送了資料...