Unix/Linux 編程實踐教程第六章習題

tips: 這一章習題倒是少,練習題多到頭皮發麻。。。編程練習 6.3 中的毫秒應該是寫錯了,是百毫秒

6.1

tr命令用於轉換或刪除文件中的字符,詳細的用法可以參考
Linux tr命令,至於不接受命令行指定文件,我想是因爲標準輸入輸出可以被重定向到任何類型的鏈接上,包括文件,所以沒有必要接受命令行指定文件。這樣只考慮標準輸入輸出降低了程序編寫的難度,相應的,用戶使用起來就相對麻煩一些,當然,這只是我的猜測,可能不對。除了tr,還有colrm工具。

6.2

對於磁盤文件而言,設置O_NODELAY僅僅改變了文件描述符屬性的一個 bit,除此之外沒有任何影響,這是因爲磁盤文件在任何時候都是可讀可寫的,這在POSIX標準中有明確說明。阻塞和非阻塞的區別在於請求不能立即得到應答,需要等待,那就是阻塞;否則可以理解爲非阻塞,根據上面的定義,磁盤文件本來就是非阻塞的,所以O_NODELAY沒有意義。
對於socket而言,網絡上的數據到達的時間是不確定的,不是任何時候都有數據的,和磁盤文件不一樣,這種情況下設置O_NODELAY纔有意義。

tips: 這道題以我目前的水平回答的還不是很準確,主要是總是把非阻塞異步混爲一同,比如給磁盤文件設置O_NODELAY就有種效率肯定提升了,是異步操作的感覺,其實這是錯誤的,處理 IO 的時候,阻塞和非阻塞都是同步 IO,實際上要解決大量讀寫磁盤文件的問題,只有使用多線程或者異步IO

參考資料:
Non-blocking I/O with regular files)
怎樣理解阻塞非阻塞與同步異步的區別?
爲什麼用non-blocking的方式讀寫磁盤文件無意義?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章