开始读TLPI

开始读TLPI
TLPI即The Linux Programming Interface: A Linux and UNIX System Programming Handbook每章的笔记和练习博客地址如下章节序号章节名称读书笔记练习1History and Standardsurl无2Fundamental Conceptsurl无3System Programming Conceptsurlurl4File I/O: The Universal I/O Modelurlurl5File I/O: Further Detailsurlurl6File I/O: Further Detailsurlurl7Memory Allocationurlurl8Users and Groupsurlurl9Process Credentialsurlurl10Timeurlurl11System Limits and Optionsurlurl12System and Process Informationurlurl13File I/O Bufferingurlurl14File Systemsurlurl15File Systemsurlurl16File Systemsurlurl17Access Control Listsurlurl18Directories and Linksurlurl19Monitoring File Eventsurlurl20Signals: Fundamental Conceptsurlurl21Signals: Signal Handlersurlurl22Signals: Advanced Featuresurlurl23Timers and Sleepingurlurl24Process Creationurl无这里有关于此书的介绍和随书代码。以下是读书过程中会用到的一些工具。代码美化工具astyleAStyleArtistic Style 是一款免费、开源、轻量、跨平台的代码自动格式化 / 美化工具专为 C/C 等类 C 语言设计核心是统一代码风格、提升可读性、不改变代码逻辑。大部分时候如下运行即可astyle a.c安装使用yum即可$ sudo yum install astyle $ rpm-qa|grep astyle astyle-3.1-15.el9.x86_64代码索引工具ctagsctags 是一款免费开源、跨平台的代码索引工具核心作用是为代码文件生成标签索引让你能快速定位变量、函数、类、宏等代码元素的定义位置是程序员阅读、导航源码的核心工具之一。生成tag$ sudo-s#cd/usr/include#ctags-R#lstagstags#wc-l tags150356tags使用tag:$ cd/usr/include $ vi-t stat $ vi-t O_APPEND $ vi-t MAJORC语言标准查看当前默认 C 标准$ gcc-E-dM-/dev/null|grep__STDC_VERSION__#define __STDC_VERSION__ 201710L输出显示为c17其他可能的输出为C89, C99, C11等。查看 GCC 编译器版本$ gcc--versiongcc(GCC)11.5.020240719(Red Hat11.5.0-11.0.1)Copyright(C)2021Free Software Foundation, Inc. This isfreesoftware;see thesourceforcopying conditions. There is NO warranty;not evenforMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.版本对应默认标准GCC 5 → 默认 C89GCC ≥ 5 → 默认 GNU11C11 扩展GCC ≥ 8 → 默认 GNU17C17 扩展手动指定 C 标准编译gcc-stdc11 test.c-otest# C11gcc-stdc17 test.c-otest# C17查看帮助man page的章节划分章节号内容类型示例1用户命令可直接执行man 1 ls查看ls命令用法2系统调用内核提供的函数man 2 read查看read系统调用3库函数C标准库等man 3 printf查看printf库函数4特殊文件如/dev下的设备man 4 tty5文件格式/配置文件man 5 passwd查看passwd文件格式6游戏/娱乐较少用7杂项协议、宏等man 7 regex正则表达式8系统管理命令root用man 8 reboot如果你不记得第2章的描述可以man2intro系统调用都在man page的第2部分查询时加上章节号。因为有的命令存在于多个章节$man2read$manread更进一步一些结构的定义在章节3typeman3typestat详见帮助manman在线帮助见这里。调试工具gdb安装sudoyuminstallgdb以下来自man page:调试器如 GDB的目的是让你在另一个程序执行时看到它“内部”发生了什么——或者看到另一个程序在崩溃时正在做什么。GDB 可以做四种主要的事情以及其他支持这些事情的操作来帮助你抓住程序中的错误启动你的程序并指定可能影响其行为的任何内容。使你的程序在指定条件下停止。当程序停止时检查已经发生的事情。修改程序中的内容这样你可以尝试纠正一个错误的影响并继续了解另一个错误。GDB文档总目见这里。详细使用帮助见这里。GDB的吉祥物mascot是弓箭鱼按官网说法For a fish, the archer fish is known to shoot down bugs from low hanging plants by spitting water at them.对于鱼类来说弓箭鱼会通过向低垂植物喷水射落虫子。随书示例在线看代码见这里。离线版本参见这里。又分为Distribution version和Book version。前者内容多些我用的后者不过作者建议前者。$lstlpi-260105-book.tar.gz $tar-zxvftlpi-260105-book.tar.gz $lstlpi-260105-book.tar.gz tlpi-book $cdtlpi-book/ $make然后进入相应的章节make即可例如$cdfiles $make2026年3月1日开读