tips: 这一章习题倒是少,练习题多到头皮发麻。。。
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的方式读写磁盘文件无意义?
网友评论