我有這種情況。我們是否需要關閉顯式寫入端已經關閉的管道的讀取端?
我創建了一個管道。
分叉一個子進程。
子進程關閉讀管道明確末和寫入管道和出口的寫入結束,但不關閉任何東西(退出應該關閉代子的所有打開的文件/管描述,我相信)。
父關閉管道明確寫端和使用
fgets
直到fgets
返回NULL管道的讀端讀取。即它完全讀取。
現在我的問題是,爲什麼父母需要顯式關閉管道的讀取結束一旦完成閱讀?一旦從讀取端讀取完整數據後,系統是否明智地刪除管道?
我力明確關閉讀端在父母和我有Too many file descriptors
錯誤遲早會同時打開多個管。我的假設是,一旦寫入端關閉並且數據已從讀取端完全讀取,系統會自動刪除管道。因爲你不能從管道上兩次!
所以,什麼不刪除數據一旦管道系統背後的理念已經完全讀寫結束時關閉?
「因爲你不能從一個管道兩次!」? – 2012-08-06 10:31:11
@KerrekSB我的意思是你可以兩次讀相同的管道,但會在第二次看到EOF嗎? – 2012-08-06 10:37:47