处理系统调用中的错误
系统调用会遇到哪些错误呢?每个系统调用都有自己的错误集,以open为例,如果要打开的文件不存在,或者没有权限,都会报错,返回-1,但是如何确定到底是发生了哪一类具体错误呢?
确定错误种类:errno
内核通过全局变量errno来指明错误的类型,每个程序都可以访问到这个变量。
在man error(3)和<errno.h>中可以看到包含的错误代码和相应说明,例如:
|
|
根据不同错误进行不同的具体处理
|
|
需要根据不同的错误类型进行不同的处理。
如果打开文件不存在,那么给出提示重新输入文件名,如果打开太多文件,就关闭一些不要的,去做一些相应的处理。
显示错误信息
如果需要显示错误信息,根据不同错误代码打印相应的错误信息字符串,不需要像上面那个例子那样麻烦,简单的办法是使用perror(string)这个函数,它会自己查找错误代码,在标准错误输出中显示相应的错误信息,参数string是要同时显示出的描述性信息前缀。
例如:
|
|
当有错误发生时,会看到类似如下信息:
|
|
显示第一部分就是描述性信息前缀,第二部分是根据错误代码查到的错误提示。
或者使用<string.h>下的strerror,输出一个描述error的字符串。
|
|
输出为:
|
|