Linux_UNIX编程手册-读书笔记-第三章(系统编程概念)

3.1节看得有点懵,暂时没仔细看

3.2 库函数

库函数相当于是系统调用的上一层,不过只有部分库函数会调用系统调用

  • 不调用系统调用的库函数:字符串操作函数(strstr,strchr…)
  • 调用系统调用的库函数:fopen()->open(), printf()->write(), malloc(), free()->brk()…

往往,设计库函数是为了提供比底层系统调用更为方便的调用接口

3.3 标准C 函数库

GUN C语言函数库是linux上最常用的实现(glibc)

3.4 处理来自系统调用和库函数的错误

系统调用的错误:

要了解调用是否成功,必须坚持对状态值进行检查。

通常,返回值为-1表示出错
系统调用失败时,会将全局变量error设置为一个正值,以标识具体的错误。
少数系统调用在调用成功时,也会返回-1(如getpriority)

提供库函数perror()和strerror(),根据errno值打印错误信息。

perror的简单使用:
在这里插入图片描述

strerror()会针对其errnum参数中所给定的错误号,返回相应的错误字符串。
在这里插入图片描述

库函数的错误:
从错误处理的角度来说,可将库函数划分为以下几类。

  • 某些库函数返回错误信息的方式与系统调用完全相同----(返回-1,伴之以errno),如remove->unlink/rmdir
  • 某些会返回-1之外的其他值,但仍会设置errno(如fopen出错会返回一个NULL指针)
  • 还有些根本不使用errno

3.5 书中示例 略

3.6 可移植性问题

第一节,看不懂=-=

系统数据类型:
总而言之,为了避免可以执行问题,SUSv3规范了各种标准系统数据类型

标准系统数据类型中的大多数,其命名均以_t结尾。其中的许多都声明与头文件<sys/types.h>中,余下少量则定义与其他头文件中

其他可移植性问题,感觉目前不会遇到,二刷时候再看好了…

3.7 总结

哪怕是最简单的系统调用都会产生显著的开销,其原因是为了执行系统调用,系统需要临时切换到内核态,此外内核还需要验证系统调用的参数,用户内存和内核之间也有数据需要传递。

…其他的都说过了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值