
檔案 I/O
|
55
int ret;
ret = truncate ("./pirate.txt", 45);
if (ret ==
−
1) {
perror ("truncate");
return
−
1;
}
return 0;
}
結果會產生長度 45 個位元組具有如下內容的
pirate.txt
檔案:
Edward Teach was a notorious English pirate.
多工式 I/O
應用程式通常需要控制一個以上的檔案描述器,反覆地與鍵盤輸入(
stdin
)、行程間通
訊以及若干檔案進行 I/O。現代的事件驅動(event-driven)圖形化操作介面(graphical
user interface,簡稱 GUI)應用程式可透過其 mainloop(主迴圈)來處理數以百計之待
決事件。
5
不藉助執行緒(也就是分開服務每個檔案描述器)單一行程無法在同一時間控制一個以
上的檔案描述器。只要每個檔案描述器隨時都可以被讀取或寫入,就能夠把多個檔案描
述器處理得很好。但是一遇到尚未準備好的檔案描述器(舉例來說,如果進行
read()
系統呼叫時,資料尚未備妥)行程將受到阻擋,不再能夠服務其他的檔案描述器。行程
可能只會受阻幾秒鐘的時間,而讓應用程式的效率變低以及困擾用戶。然而,如果該檔
案描述器之上一直都沒有出現可用的資料,則行程就會永遠受到阻擋。因為各個檔案描
述器之 I/O 往往都是相互關聯的—例如導管—非常可能會出現「一個檔案描述器備妥與
否,取決於另一個檔案描述器是否被服務過」的情況 ...