當前位置:首頁 » 操作系統 » 原子操作linux

原子操作linux

發布時間: 2025-04-30 13:48:05

1. Linux編程--文件原子操作

當多個進程同時訪問一個文件的時候,普通的write/read在執行的時候,無法保證操作的原子性,可能會導致文件被污染,達不到預期的結果。

任何一個需要多個函數調用的操作都不可能是原子操作,因為在兩個函數調用間,內核可能會將進程掛起執行另外的進程。

如果想要避免這種情況的話,則需要使用pread/pwrite函數

ssize_t pread(int fd ,void *buffer ,size_t size,off_t offset)
返回真正讀取到的位元組數,offset是指的從文件開始位置起的offset個位元組數開始讀。其餘的參數與read無異。

PS:
pread是無法中斷的原子操作,無法中斷它的定位和讀取操作
pread讀取過後的文件偏移量不會發生改變

同理pwrite也是一樣的

而在文件創建的時候也是一樣的,當需要做文件創建同步的時候,我們需要在O_CREATE的時候,加上O_EXCL標志位,當已經創建過的話,會返回fd,否則返回錯誤

int p( int filedes):
傳入一個文件描述符,返回當前可用的最小文件描述符。

int p2(int filedes,int filedes2):
傳入文件描述符,以及新的文件描述符,如果新的文件描述符所指向的文件已經打開,則會強行將其關閉後,將該文件描述符指向到已存在的文件描述符。
如果filedes和filedes2指向同一個文件,則不做任何處理,直接返回filedes2,不會關閉文件

新返回回來的filedes2會共享filedes的文件狀態標識,文件偏移量等等信息。因為它們的文件指針會指向文件表的同一個位置。只是fd不一樣而已。

熱點內容
復仇之淵下載ftp 發布:2025-04-30 15:38:13 瀏覽:858
為什麼大品牌都沒有安卓導航 發布:2025-04-30 15:38:13 瀏覽:535
不解壓查看tgz文件中 發布:2025-04-30 15:34:54 瀏覽:327
華為鴻蒙換回安卓系統有什麼影響 發布:2025-04-30 15:00:34 瀏覽:701
頁面訪問界面升級狼 發布:2025-04-30 14:58:21 瀏覽:470
ue4vs編譯器無法自動打開 發布:2025-04-30 14:47:23 瀏覽:484
python數據科學手冊 發布:2025-04-30 14:41:05 瀏覽:592
python調用cso 發布:2025-04-30 14:40:48 瀏覽:109
巧妙的演算法 發布:2025-04-30 14:18:12 瀏覽:729
如何讓伺服器分配指定ip 發布:2025-04-30 14:13:04 瀏覽:14