对于 Linux 下的 C 语言工程师,什么最重要?

C 工程师(侧重应用层 C 工程师)写的代码,无非是从最简单的 hello world 到复杂的多进程、多线程、IO、socket、IPC 等

不管代码多复杂,无外乎是对 Linux 系统中系统调用、库函数、shell 这三种资源的使用。

系统调用:fork、exit、getpid、open、read、write…

库函数:printf、putchar、socket、fopen、fread、fwrite…

shell:ls、pwd、reboot…

其中,shell 也是 C 语言写的,可以说 shell 也是在调用系统调用和库函数。

所以最重要的东西就两个了:系统调用、库函数。

并且,有些系统调用我们可以通过库函数间接调用,如使用库函数中的 fopen,而不直接使用系统调用 open,库函数帮我们做了一些保护和优化,增强我们代码的健壮性。

从这里就可以看出库函数有多重要了。

在 Linux 中,库函数指的是 Glibc

在 Windows 中,库函数指的是

重写

学习 C 语言

初学 C 语言的同学可能会有如下疑问:

  1. 学完 C 语言后能干什么?

  2. C 语言的语法我都学完了,还有什么要学的吗?

做一个类比

学驾照前后,我们的肢体能力是没多大变化的,四肢都能前后左右地运动,头也能左右上下地转。学会 C 语言,就相当于我们学会了肢体能力,但是有了这个肢体能力,我们并不会『开车』这个技能。我们还进行训练,将这些肢体能力组合起来,实现『开车』这个技能。就像我们能够使用 C 语言写出 TCP 客户端程序。C 语言语法是程序的基础,TCP 客户端程序是用这个基础实现的一个功能,也就回答了学完 C 语言后能干什么。

不过,大家有没有进一步思考,C 语言只是程序的一个语法,它是怎样让程序具有 TCP 通信的能力的呢?答案是 C 程序和操作系统产生了联系,因为 TCP 通信能力是操作系统具有的,应用程序也具备了这个能力,肯定是 C 语言使得应用程序和操作系统产生了某种联系,这个联系就是通过系统调用产生的。

所以,对于第一个问题:学完 C 语言后能干什么?那要看你对运行 C 程序的操作系统有多了解,尽量让 C 程序和操作系统产生更多的联系,这样你的 C 程序就具有更多的功能。这里面最重要的就是系统调用,如 C 程序调用操作系统提供的 fork 系统调用可以克隆出和自己一模一样的进程。

对于第二个问题,学完 C 语言语法,还要学什么?我的答案是 Glibc,当然是对于 Linux 系统。

参考

6.1管理Glibc库文件

glibc源码分析