在l i n u x系統中,管道用兩個指向同乙個臨時性v f s索引節點的檔案資料結構來實現。這
個臨時性的v f s索引節點指向記憶體中的乙個物理頁面。乙個例程用於寫管道,另乙個用於從管道中讀資料。從一
般讀寫普通檔案的系統呼叫的角度來看,這種實現方法隱藏了下層的差異。當寫程序執行寫
管道操作時,資料被複製到共享的資料頁面中;而讀程序讀管道時,資料又從共享資料頁中復
制出來。l i n u x必須同步對管道的訪問,使讀程序和寫程序步調一致。為了實現同步, l i n u x
使用鎖、等待佇列和訊號量這三種方式。
寫程序使用標準的寫庫函式來寫管道。使用檔案操作庫函式要求傳遞檔案描述符來索引
程序的檔案資料結構集合。每個檔案資料結構代表乙個開啟的檔案或是乙個開啟的管道。
l i n u x寫系統呼叫使用代表該管道的檔案資料結構指向的寫例程,而寫例程又使用代表該管道
的v f s索引節點中儲存的資訊來管理寫請求。
如果有足夠大的空間把所有的資料寫入管道中,並且該管道沒有被讀程序鎖定,那麼
l i n u x為寫程序鎖定管道,把待寫的資料從程序空間複製到共享資料頁中。如果管道被讀程序
鎖定或者沒有足夠大的空間存放資料,那麼當前的程序被強制進入睡眠狀態,放在管道對應
的索引節點的等待佇列中,然後系統呼叫程序排程器來選擇合適程序進入執行狀態。睡眠的
程序是可中斷的,它可以接收訊號;也可以在管道中有足夠大空間來容納寫資料或在管道被解
鎖時,被讀程序喚醒。寫資料完成後,管道的v f s索引節點被解鎖。系統會喚醒所有睡眠在
讀索引節點等待佇列中的讀程序。
l i n u x也支援命名管道(named pipes) 。因為這種管道遵循先進先出的規則,所以它也被
稱為f i f o (先進先出)管道。普通的管道是臨時性的物件,而f i f o管道是通過m k f i f o命令建立
的檔案系統中的實體。只要有適當的許可權,程序就可以自由地使用f i f o管道。但f i f o管道
的開啟方式與普通管道有所不同:普通管道(包括兩個檔案資料結構:對應的v f s索引節點以
及共享資料頁)在程序每次執行時都會建立一次,而f i f o是一直存在的,需要使用者開啟和關
閉。l i n u x必須處理讀程序先於寫程序開啟管道、讀程序在寫程序寫入資料之前讀入這兩種
情況。除此之外, f i f o管道的使用方式與普通管道完全相同,都使作相同的資料結構和操作。
linux Linux學習總結 套接字
bsd套接字介面 l i n u x支援多種套接字型別。套接字型別,是指建立套接字的應用程式所希望的通訊服務 型別。同一協議族可能提供多種服務型別,比如t c p i p協議族提供的虛電路與資料報就是兩 種不同的通訊服務型別,linux bsd支援如下幾種套接字型別 stream 提供可靠的面向連線...
初識Linux Linux檔案和檔案操作管理
1.什麼是inode 首先我們要知道檔案在硬碟上的最小儲存單位叫扇區每個扇區儲存512位元組,作業系統不會乙個乙個扇區讀取,效率太低了,而是一次讀取多個扇區一次性讀取姨 塊 塊,一般是4kb,也就是8個扇區。檔案的資料都儲存在塊中,那麼必然得乙個地方儲存檔案的基本資訊 元資訊 這種儲存檔案基本資訊的...
學習Linux Linux的計算
在linux裡面使用expr命令進行運算,比如 expr 1 2結果就是3,輸入命令的時候注意不同字元之間的空格。還有乘號使用的是 這裡需要轉義,不能直接expr 1 2要expr 1 2 這裡定義了2個變數。注意定義變數的時候是不要加空格的,而計算的時候是要加空格的。結果 result 30 不僅...