Linux系统编程手册 学习笔记(一)

本文介绍了Linux系统编程中的系统调用概念,包括如何通过系统调用进入内核,如何处理错误,以及系统调用与库函数的区别。强调了错误处理的重要性,如检查函数返回值和errno,并提到了perror()和strerror()在诊断错误时的作用。
摘要由CSDN通过智能技术生成

第三章 系统编程概念

1、系统调用的概念:
用户通过系统调用来进入到linux内核中,可以利用应用程序编程接口(API)的形式来访问系统提供的服务。其中包括创建新的进程、执行I/O、为进程间通信创建管道等。


2、用户态进行系统调用情况:
用户通过调用glibc库中的外壳函数来发起系统调用。
外壳函数会将系统调用所需参数传入到特定的寄存器內;系统调用进入内核的方式都是一样的。
内核为了区分要调用哪一个系统操作,所以使得外壳函数将需要使用的系统调用编号也要存放到相应的cpu寄存器中(%eax)。
系统调用完毕会返回给外壳函数一个值来表明调用结果,然后外壳函数利用返回值来设置全局变量errno。然后,外壳函数会返回调用程序,并返回一个整型值来表明系统调用是否成功。
在linux上,系统调用的惯例是调用成功返回非负值。发生错误时,将相对应的errno常量取反再返回。外壳函数会对其再次取反,并将结果拷贝到errno中,同时以-1作为外壳函数的返回值返回,向调用程序表明有错误发生。
系统调用的开销小,但系统在用户态与核心态之间的切换耗时较长,不如直接使用库函数。


3、库函数:
库函数有的可以不使用任何系统调用,而有的则建立在系统调用之上。例如,库函数fopen()就利用系统调用open()来执行打开文件的实际操作。标准c语言函数库:glibc。在ubuntu上可以使用 ldd –version 来查看自己的glibc版本号。


4、处理错误:
几乎每个系统调用和库函数都会返回某类状态值,用来表明调用是否成功。要了解调用是否成功,必须要对状态值进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值