第 1 章 应用编程概念

1.1 系统调用

系统调用(system call)其实是 Linux 内核提供给应用层的应用编程接口(API),是 Linux 应用层进入内核的入口。不止 Linux 系统,所有的操作系统都会向应用层提供系统调用,应用程序通过系统调用来使用操作系统提供的各种服务。

通过系统调用,Linux 应用程序可以请求内核以自己的名义执行某些事情,譬如打开磁盘中的文件、读

写文件、关闭文件以及控制其它硬件外设。

通过系统调用 API,应用层可以实现与内核的交互。

在这里插入图片描述

1.2 库函数

系统调用是内核直接向应用层提供的应用编程接口,譬如 open、write、read、close 等。编写应用程序除了使用系统调用之外,我们还可以使用库函数。

库函数也就是 C 语言库函数,C 语言库是应用层使用的一套函数库,在 Linux 下,通常以动态(。so)库文件的形式提供,存放在根文件系统/lib 目录下。

C 语言库函数构建于系统调用之上,库函数其实是由系统调用封装而来的。但是有些库函数并不调用任何系统调用。

有些系统调用使用起来并不是很方便,于是就出现了 C 语言库,这些 C 语言库函数的设计是为了提供比底层系统调用更为方便、更为好用、且更具有可移植性的调用接口。

库函数和系统调用的区别:

  • 库函数是属于应用层,而系统调用是内核提供给应用层的编程接口,属于系统内核的一部分。
  • 库函数运行在用户空间,调用系统调用会由用户空间(用户态)陷入到内核空间(内核态)。
  • 库函数通常是有缓存的,而系统调用是无缓存的,所以在性能、效率上,库函数通常要优于系统调用。
  • 可移植性:库函数相比于系统调用具有更好的可移植性。

应用编程简单点来说就是:开发 Linux 应用程序,通过调用内核提供的系统调用或使用 C 库函数来开发具有相应功能的应用程序。

1.3 标准 C 语言函数库

在 Linux系统下,使用的C语言库为 GNU C语言函数库,作为 Linux下的标准 C 语言函数库。

1.4 main 函数

在 Linux 应用程序中,main 函数也是作为应用程序的入口函数存在,main 函数的形参一般会有两种写法,如果执行应用程序无需传参,则可以写成如下形式:

int main(void)
{
     /* 代码 */
}

如果在执行应用程序的时候需要向应用程序传递参数,则写法如下:

int main(int argc, char **argv)
{
     /* 代码 */
}

argc 形参表示传入参数的个数,包括应用程序自身路径和程序名

./hello 112233

那么此时参数个数为 2,并且这些参数都是作为字符串的形式传递给 main 函数

argv[0]等于"./hello"

argv[1]等于"112233"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值