Linux下的编程开发——系统调用编程

一、工具介绍
1.GCC编译工具

(1)工作过程
Linux下的编程开发——系统调用编程
(2)gcc 常用参数
Linux下的编程开发——系统调用编程
(3)实例:
※ 实例1:输出hello world
步骤:
①编写hello.c文件并保存
②编译:
gcc hello.c  结果文件缺省名为a.out

gcc hello.c -o hello  指定结果文件名为hello
③执行:
./a.out 或 ./hello
注意:由于编译得到的程序所在目录并不在系统的PATH环境变量里,所以执行该程序时要给清楚程序所在目录,比如在当前目录下应执行如下命令,代表当前目录的点符号不能丢
Linux下的编程开发——系统调用编程
Linux下的编程开发——系统调用编程
※ 实例2:输出两个数的乘积和阶乘
Linux下的编程开发——系统调用编程
Linux下的编程开发——系统调用编程
注意:-I 指定头文件所在目录,不指定参数将编译出错

2.GDB调试器
  • 命令行方式运行
  • gcc –g 才能使生成的可执行文件包含调试信息,才能被GDB调试
    Linux下的编程开发——系统调用编程
    实例:对上面的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

示例:
Linux下的编程开发——系统调用编程

二、系统调用的概念
系统调用与库函数

Linux下的编程开发——系统调用编程

  • 为了系统运行安全,用户级的应用程序是不允许直接调用内核级的功能代码
  • 系统调用就是用户进程进入内核的接口层。提供功能实现的内核函数被称为系统调用的“服务例程”
  • 库函数是应用程序编程接口的具体实现。库函数并不一定提供全部系统调用功能的封装,也并不一定必然封装系统调用功能。
    Linux下的编程开发——系统调用编程