美文网首页Unix/Linux 编程实践教程
Unix/Linux 编程实践教程第六章习题

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

作者: 王鲜申 | 来源:发表于2019-08-29 09:52 被阅读0次

    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 编程实践教程第六章习题

        本文链接:https://www.haomeiwen.com/subject/gsmbectx.html