Unix/Linux 编程实践教程第六章习题

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的方式读写磁盘文件无意义?

你可能感兴趣的:(Unix/Linux 编程实践教程第六章习题)