Linux下的编程开发——系统调用编程
一、工具介绍
1.GCC编译工具
(1)工作过程
(2)gcc 常用参数
(3)实例:
※ 实例1:输出hello world
步骤:
①编写hello.c文件并保存
②编译:
gcc hello.c 结果文件缺省名为a.out
或
gcc hello.c -o hello 指定结果文件名为hello
③执行:
./a.out 或 ./hello
注意:由于编译得到的程序所在目录并不在系统的PATH环境变量里,所以执行该程序时要给清楚程序所在目录,比如在当前目录下应执行如下命令,代表当前目录的点符号不能丢
※ 实例2:输出两个数的乘积和阶乘
注意:-I 指定头文件所在目录,不指定参数将编译出错
2.GDB调试器
- 命令行方式运行
- gcc –g 才能使生成的可执行文件包含调试信息,才能被GDB调试
实例:对上面的calculate.c进行调试,则可以执行以下命令:
gcc -g calculate.c -o compute
gdb compute
3.MAKE工具
(1)GNU make
- 对包含一组文件的项目进行管理
- 采用增量编译,避免大量的重复计算,提高了编译效率。
(2)makefile脚本文件
- 所有编译操作写在一个文件内,方便维护编译工作,默认该文件叫makefile 。
- 该文件定义多个源文件之间的依赖关系;说明如何编译各个源文件并链接生成可执行文件。
- makefile文件一般由一种两行的脚本单元(规则)组成,简单例子:
①编写:vi makefile
test:test.c test.h (目标文件:依赖文件)
gcc test.c –o test (达成目标使用的命令,注意句子前有一个tab)
②执行:
make (默认使用当前目录下的makefile)
make –f mk (指定编译使用的make文件是mk)
注意:如果执行makefile文件中的某个目标cls的话,可以用 make -f mk cls
示例:
二、系统调用的概念
系统调用与库函数
- 为了系统运行安全,用户级的应用程序是不允许直接调用内核级的功能代码
- 系统调用就是用户进程进入内核的接口层。提供功能实现的内核函数被称为系统调用的“服务例程”
-
库函数是应用程序编程接口的具体实现。库函数并不一定提供全部系统调用功能的封装,也并不一定必然封装系统调用功能。