Skip to Content
LINUX系統程式設計 第二版
book

LINUX系統程式設計 第二版

by Robert Love
December 2013
Intermediate to advanced
496 pages
8h 57m
Chinese
GoTop Information, Inc.
Content preview from LINUX系統程式設計 第二版
檔案 I/O
|
41
perror ("write");
break;
}
len -= ret;
buf += ret;
}
附加模式
如果(透過
O_APPEND
旗標)以附加模式開啟
fd
,寫入的動作並不會發生在「檔案描述
器」的當前檔案位置,而會發生在檔案當前的末端位置。
舉例來說,假設有兩個行程試圖對同一個檔案進行寫入操作。舉個常見的例子:多個行
程共享相同的事件日誌。一開始,它們的檔案位置被正確地設定在檔案的末端。首先第
一個行程會把位元組寫入檔案的末端,然後第二個行程進行同樣的操作,若沒有附加模
式,那麼第二個行程的檔案位置將不再指向檔案的末端,而會指向檔案的末端位置減去
第一個行程所寫入的位元組數目。這意味著,在沒有明確採用任何同步機制的狀況下,
不可以有多個行程對相同的檔案進行附加操作,因為這將會造成爭用的情況。
採用附加模式可避免此問題。它可確保檔案位置總是被設定為檔案末端,所有寫入操作
總是附加到檔案末端,即使存在多個寫入者。你可以把前面的每個寫入要求,想成是會
對檔案位置進行不可分割的更新。因此,檔案位置會被更新成剛才所寫入之位元組的末
端。這並不關下一個
write()
呼叫的事,因為檔案位置的更新是自動進行的,但如果因
為某些奇怪的理由而讓下一個呼叫成為
read()
,那麼可能就無法置身事外了。
附加模式對某些工作(例如,寫出日誌檔)而言可能意義重大,但是對許多其他工作而
言可能意義不大。
非阻擋寫入操作
如果(經由
O_NONBLOCK
旗標)以非阻擋模式開啟
fd
,但是寫入要求遭到阻擋,那麼
write() ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

優雅的SciPy|Python科學研究的美學

優雅的SciPy|Python科學研究的美學

Juan Nunez-Iglesias, Stéfan van der Walt, Harriet Dashnow
C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普

Publisher Resources

ISBN: 9789862769812