根据这个问题,学习系统编程的一个好方法是实现现有的工具。我决定尝试重写ls
和ps
。
我的问题是如何继续获取此类文档?
在哪里可以找到查询内核、文件系统等所需的系统调用 API...
我想也许我可以看一下 GNU 工具的源代码。我在哪里可以找到它?
你们是否有任何(希望可以在线免费获得)好的文档推荐来指导从哪里开始?
答案1
您可以使用glibc手册作为参考。它不适合绝对的初学者,但如果您相当流利地使用 C,您应该能够阅读其中的一部分并编写一个工作程序。
您可以在以下位置找到 GNU 工具的源代码:GNU 网站;获取它的最简单方法是获取 Linux 发行版上的源代码包(例如,apt-get source coreutils
如果您的发行版使用 Debian 打包实用程序)。我建议从忙碌盒而不是 GNU 工具。 BusyBox 是一组用于嵌入式 Linux 系统的实用程序;它比 GNU 实用程序更小、更简单。
您可以运行strace ls
以查看ls
正在进行哪些系统调用。请注意,当您编写程序时,您不会直接调用系统调用,而是调用C库中进行系统调用的函数。对于文件操作之类的事情,C 库函数open
与read
系统调用非常接近。
对于学习来说,一本书(纸质)通常会有帮助。UNIX® 环境中的高级编程(APUE)是经典。如果您获得了它,请确保获得第二版,因为第一版已经过时了。本书是参考书,但其他书籍可能更适合初学者;货比三家。
答案2
在操作系统、命令 asps
和free
是top
从读取信息来实现的过程文件系统。
The proc file system is a pseudo-file system which is used as an inter-
face to kernel data structures. It is commonly mounted at /proc. Most
of it is read-only, but some files allow kernel variables to be
changed.
首先man 5 proc
,不要忘记所有这些实用程序都是开源的,因此您也可以查看它们代码。