Understanding UNIX/LINUX Programming

Bruce Molay

出版社

Prentice Hall

出版时间

2002-12-05

ISBN

9780130083968

评分

★★★★★
书籍介绍
这本书最难得之处,在于它把UNIX系统编程从一堆冷冰冰的API调用,还原成一件可以亲手拆解、再亲手重建的事。作者不满足于告诉你'怎么用',而是逼你搞清楚'为什么'——文件描述符为何会卡在非阻塞状态、标准输入被重定向后getchar为何会读错数据流、rmdir为何拒绝删除含子目录的目录。每一个概念都裹着一个真实的、会'出错'的问题,让你先踩坑,再回头看原理。它不追求覆盖最新Linux版本的所有命令,而是用read/write/lseek这些最基本的原语,带你手写分页器、定位文件,把'系统到底在做什么'看得清清楚楚。如果你已经会写C,却总觉得Linux编程高不可攀,这本书会告诉你:难的不是API,而是那份'从原理出发'的踏实感。
AI导读
核心看点
  • 采用What-How-Write三步法,循序渐进讲解系统编程
  • 通过手写ls、more等命令,深入理解底层系统调用
  • 图文并茂解释晦涩概念,代码注释清晰,适合自学
读者共识
  • 相比APUE更轻量友好,是系统编程入门的上佳之选
  • 讲解逻辑清晰自然,能有效建立对Unix系统的整体认知
  • 虽年代久远且排版有瑕疵,但核心思想至今仍极具价值
精彩摘录
  • "实际上程序会立刻退出,而不执行重置驱动程序的代码。当返回shell显示提示符并从用户处获得命令行时,终端仍旧处于非阻塞模式。shell调用read获取命令行,但是因为处于非阻塞状态,read立即返回0。总之,程序结束时文件描述符处于一个错误的状态。"
  • "与普通文件一样,目录也有特殊属性位,其中包含set-user-ID和set-group-ID位,使set-user-ID有效对目录有什么影响?如果有,那是什么?为什么?如果没有影响,那么你能想象出这些位有什么作用吗?"
  • "while((n_chars = read(in_fd, buf, BUFFERSIZE)) > 0) { int write_res = write(out_fd, buf, n_chars); printf("%d\t%d\n", n_chars, write_res); if (write_res != n_chars) oops("Write error to ", av[2]); }"
  • "#define OUTFDCHOMD 0775 if ((out_fd = open(av[2], O_CREAT | O_WRONLY, OUTFDCHOMD)) == -1)"
  • "然而实际的运行结果并不是这样的,24行以后并没有暂停而是继续输出,问题在哪里呢? 当more01读入第24行后,它打印了more?,然后等待用户输入。 用户的输入是从哪里来的?在more01中用getchar(),它是从标准输入读数据的,问题就在这里。刚才的命令:$ls/bin|more01 已经将more01的标准输入重定向到ls的标准输出,这样more01将从同一个数据流中读用户的输入,这显然有问题 解决这个问题的方法是,从标准输入中读入要分页的数据,直接从键盘读用户的输入"
  • "习题4.10 rmdir不删除含有文件或子目录的目录。为什么要这么做? 另一方面,可以删除含有用户的目录。尝试一下的操作:生成一个由自己命名的新目录并进入这个目录,然后开启另一个命令窗口,删除这个新目录。关闭第二个命令窗口,输入命令/bin/pwd,看看将产生什么。"
  • "一个星期日的深夜,您在计算机实验室中使用Linux完成一个特殊的项目。您的home目录中有两个子目录data和olddata。data目录中包含有100个重要文件。olddata目录是空的。您决定移除olddata目录,但是,在输入命令时,一颗陨石打碎玻璃,正好击中坐在您身边的一个极客。在混乱中,您不小心键入了 rmdir data 幸运的是,Unix已经准备好处理这样的偶发事件。您将看到这样的消息: rmdir:data: Directory not empty 感谢Unix内置的安全防护措施,data目录原封不动,没有被删除。"
  • "树干是根目录。每个树枝都是子目录。在任何时候,您所处的那个树枝就是工作目录。移除一个工作目录就像据掉树枝一样。移除目录的限制就是您不能据掉那个正支撑您的树枝。 移除工作目录是可能的。就像砍掉您正坐在其上的树枝一样。或许Unix不允许这样做,但是却是可以这样做。"
用户评论
劳资也有这一天(→_→)
what does it do->how does it work->let's write our own version。讲得也很清楚
关于 UNIX 编程入门的书,难度不高,循序渐进,读起来很轻松,也有不少收获,比较系统地了解(只能说是了解)了一遍 UNIX 基础。当然,这本书最大的问题也在于其写于近 20 年前,书中提到的一些命令和 API 在新版本 Linux 中已经被淘汰了,读的时候务必自行 man 查阅手册。
见中文版
相比APUE读起来轻松,手把手带你怎么找文件位置,用基本的read/write/buffer/tell手写基本指令
很强的一本书,课程问题虽然只看了前九章。讲解清楚,编写的代码也很有趣
THE Best introduction to UNIX system programming I ever read.
作者的讲解很有特色,读完之后会对Unix/Linux 系统有更深的了解
下载
收藏