系统编程:如何收集信息?

rah*_*hmu 7 c gnu system-calls

根据这个问题,学习系统编程的一个好方法是实现现有的工具。我决定尝试重写lsps.

我的问题是如何获得此类文件?

  • 我在哪里可以找到查询内核、文件系统等所需的系统调用 API...

  • 我想也许我可以看看 GNU 工具的源代码。我在哪里可以找到它?

  • 有没有(希望可以在线免费获得)好的文档,你们会推荐从哪里开始?

Gil*_*il' 10

您可以使用Glibc 手册作为参考。它不适合绝对的初学者,但如果您相当流利地使用 C,您应该能够阅读一节并编写一个工作程序。

您可以在GNU 网站上找到 GNU 工具的来源;获得它的最简单方法是获取 Linux 发行版上的源包(例如,apt-get source coreutils如果您的发行版使用 Debian 打包实用程序)。我建议从BusyBox而不是 GNU 工具开始。BusyBox 是一组用于嵌入式 Linux 系统的实用程序;它比 GNU 实用程序更小更简单。

您可以运行strace ls以查看正在执行的系统调用ls。请注意,在编写程序时,您不会直接调用系统调用,而是调用 C 库中进行系统调用的函数。对于诸如文件操作之类的事情,C 库函数类似于open并且read非常接近于系统调用。

对于学习,一本书(纸上的)通常是有帮助的。UNIX® 环境中的高级编程( APUE ) 是经典之作。如果你得到它,一定要得到第二版,因为第一版已经过时了。本书仅供参考,其他书籍可能更适合初学者;货比三家。