是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者、多工、支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體、應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用於基於intel x86系列cpu的計算機上。這個系統是由全世界各地的成千上萬的程式設計師設計和實現的。其目的是建立不受任何商品化軟體的版權制約的、全世界都能自由使用的unix相容產品。
管道,分為無名管道和有名管道,是 unix 系統ipc最古老的形式,是程序間通訊的一種
1、無名管道特點:
它是半雙工的(即資料只能在乙個方向上流動),具有固定的讀端和寫端。
它只能用於具有親緣關係的程序之間的通訊(也是父子程序或者兄弟程序之間)。
它可以看成是一種特殊的檔案,對於它的讀寫也可以使用普通的read、write 等函式。但是它不是普通的檔案,並不屬於其他任何檔案系統,並且只存在於記憶體中。
建立無名管道函式和所需標頭檔案
#include
intpipe
(int fd[2]
);
其函式返回值失敗為-1,成功為0
當無名管道建立成功時會建立兩個檔案描述符f[0] 、 f[1],並且建立成功的管道相當於乙個佇列,先進先出,有讀端和寫端
f代表讀端
f代表寫端
在通訊過程中寫端會傳入資料讀端會讀出資料
讀阻塞:如果在管道中沒有資料而執行read時,便會讀阻塞
寫阻塞:如果寫的內容的大小大於管道大小,便會寫阻塞
我們先來看一下在乙個程序裡的實現
在該程序中我們先寫入資料在讀資料,無名管道在讀資料之後管道內入隊的資料就會被出隊(因為管道相當於乙個佇列)
#include
#include
#include
intmain()
else
char write_buff=
"hello world!"
;char read_buff[
128]=;
write
(fd[1]
,write_buff,
sizeof
(write_buff));
read
(fd[0]
,read_buff,
127)
;printf
("%s\n"
,read_buff)
;close
(fd[0]
);close
(fd[1]
);return0;
}
無名管道實現的程序間通訊只能父子程序間通訊
如
#include
#include
#include
#include
#include
intmain()
else
pid_t pid =
fork()
;assert
(pid!=-1
);if(pid ==-1
)if(pid ==0)
else
;read
(fd[0]
,r_buff,
127)
;printf
("r_buff = %s\n"
,r_buff)
;close
(fd[0]
);}return0;
}
linux管道(無名管道)
首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...
無名管道和有名管道
無名管道 無名管道建立 int pipe int filedis 2 當乙個管道建立時,它會建立兩個檔案描述符 filedis 0 用於讀管道,filedis 1 用於寫管道 管道用於不同程序間通訊。通常先建立乙個管道,再通過fork函式建立乙個子程序,該子程序會繼承父程序所建立的管道 有名管道 有...
管道 無名管道 和FIFO 有名管道
管道是最初的unixipc形式,但是因為管道沒有名字,所以它們只能用於有親緣關係的程序使用 進而有名管道 fifo 應運而生,有名管道有乙個路徑名與之關聯,所以允許無親緣關係的程序訪問同乙個fifo。以下具體介紹管道 管道的建立 管道由函式 int pipe int fd 2 建立,提供乙個單向資料...