glibc
对于 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 语言的同学可能会有如下疑问:
-
学完 C 语言后能干什么?
-
C 语言的语法我都学完了,还有什么要学的吗?
做一个类比
学驾照前后,我们的肢体能力是没多大变化的,四肢都能前后左右地运动,头也能左右上下地转。学会 C 语言,就相当于我们学会了肢体能力,但是有了这个肢体能力,我们并不会『开车』这个技能。我们还进行训练,将这些肢体能力组合起来,实现『开车』这个技能。就像我们能够使用 C 语言写出 TCP 客户端程序。C 语言语法是程序的基础,TCP 客户端程序是用这个基础实现的一个功能,也就回答了学完 C 语言后能干什么。
不过,大家有没有进一步思考,C 语言只是程序的一个语法,它是怎样让程序具有 TCP 通信的能力的呢?答案是 C 程序和操作系统产生了联系,因为 TCP 通信能力是操作系统具有的,应用程序也具备了这个能力,肯定是 C 语言使得应用程序和操作系统产生了某种联系,这个联系就是通过系统调用产生的。
所以,对于第一个问题:学完 C 语言后能干什么?那要看你对运行 C 程序的操作系统有多了解,尽量让 C 程序和操作系统产生更多的联系,这样你的 C 程序就具有更多的功能。这里面最重要的就是系统调用,如 C 程序调用操作系统提供的 fork 系统调用可以克隆出和自己一模一样的进程。
对于第二个问题,学完 C 语言语法,还要学什么?我的答案是 Glibc,当然是对于 Linux 系统。