簡體   English   中英

原子寫入文件描述符

[英]Atomic writes to a file descriptor

我正在閱讀有關Linux中的pipe(7)的內容,並遇到了以下問題:

POSIX.1說,小於PIPE_BUF字節的write(2)必須是原子的:輸出數據作為連續序列寫入管道。 超過PIPE_BUF字節的寫入可能是非原子的:內核可能會將數據與其他進程寫入的數據進行交錯。 POSIX.1要求PIPE_BUF至少為512個字節。 (在Linux上, PIPE_BUF為4096字節。)

這還不太清楚。 POSIX是否要求所有寫入少於PIPE_BUF是原子的? 還是僅使用pipe(int[2], int)創建的pipe(int[2], int)適用?

所引用的行為是特定於管道的(但無論如何創建,它都適用於所有管道(例如,通過pipemkfifo + open等))。

的POSIX描述write

對管道或FIFO的寫請求應以與常規文件相同的方式處理,但以下情況除外:

  • [...]

  • {PIPE_BUF}字節或更少字節的寫請求不應與來自在同一管道上進行寫操作的其他進程的數據交織。 大於{PIPE_BUF}個字節的寫操作可能會在任意邊界上與其他進程的寫操作交織數據,無論是否設置了文件狀態標志的O_NONBLOCK標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM