Files
臨時文件與管道有何不同?
當一個人將數據(例如
stdout
)發送到臨時文件時,很可能會對該數據進行處理(臨時文件將stdin
用於某些程序),然後臨時文件將被刪除。管道是特殊文件的變體,可以將命令連結在一起;將一個程序的輸出作為另一個程序的輸入傳遞。
通常,正常管道會在程序結束後立即銷毀,但命名管道(通常命名,不一定 100% 準確,“FIFO”)會在程序結束後保持活動狀態,直到某個點。
我的問題
臨時文件很可能在使用後被刪除,而命名管道則不會,但是臨時文件和一般管道之間有什麼區別,或者至少是匿名管道?
更新
我錯誤地認為“臨時文件”是特殊文件,它不是;這是一個普通文件,只是用途不同;我會說管道在它被定義為特殊文件的意義上有所不同,並且具有單一的狹窄用途(連結),而臨時文件可能除了連結之外還有其他用途,但是可能會有更多的“總”描述差異的方式。
命名管道可能是臨時的,就像正常文件(或網路連接或任何其他提供數據“句柄”的任何東西)可能是臨時的一樣,即它可以由腳本設置以促進某種處理, 然後在腳本退出前刪除。然後它將是一個“臨時(命名)管道”。
命名管道是一個文件,因此有人可能會說命名管道(實際上是臨時的)是一個臨時文件。
但是,當人們提到“文件”時,幾乎總是指“正常文件”(即某種描述的文件),而命名管道不是正常文件。
shell 中的管道,
|
用於提供從一個實用程序到另一個實用程序的數據流,是臨時的,因為當 shell 已使用且不再需要時,shell 將釋放與其相關的任何資源。最後,管道(命名的和未命名的)和正常文件有不同的應用,應該清楚何時使用正常文件儲存臨時數據,何時使用命名管道將數據傳遞給另一個程序。