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的方式讀寫磁盤文件無意義?