當前位置:首頁 » 操作系統 » 原子操作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不一樣而已。

熱點內容
哪款app可以緩存火影忍者電視劇 發布:2025-06-17 20:53:44 瀏覽:475
飢荒伺服器如何重新加入 發布:2025-06-17 20:14:21 瀏覽:560
為什麼方舟手機進不去伺服器 發布:2025-06-17 20:05:10 瀏覽:95
12c創建資料庫 發布:2025-06-17 19:59:08 瀏覽:501
電腦配置的英文怎麼說 發布:2025-06-17 19:42:16 瀏覽:938
怎麼才能改wifi密碼 發布:2025-06-17 19:29:42 瀏覽:98
液氨壓縮機 發布:2025-06-17 19:28:57 瀏覽:114
算生肖演算法 發布:2025-06-17 19:26:50 瀏覽:778
vivo有什麼配置 發布:2025-06-17 19:25:36 瀏覽:560
android60新特性 發布:2025-06-17 19:09:40 瀏覽:925