kidneybeans 2010-08-18
看了好一段Linux下的C编程,很多东西都有了一定的了解。但是就是有一点比较含糊,那就是Linux下c的错误处理。里面有很多系统函数,也有一些是自己编写的错误处理函数my_err()。
本文中的错误是指在代码编译完全正确程序可运行的情况下,因为没有成功调用程序中的某些系统调用函数而产生的错误。往往这些系统调用函数通过返回值(比如1,0,-1)来说明其是否调用成功,而程序员需要知道详细的错误信息,因此自建错误捕获函数很有必要。
(1)errno和strerror()
void my_err(int error)
{
printf("error: %s with errno: %d\n",strerror(error),error);
exit(1);
}
int main()
{
..............
my_err(errno);
..............
}
其中char *strerror(int errnum);是通过errnum来获取错误描述,errnum即所传递的errno。该函数末尾的exit(1)使得程序发生错误时退出。但应该包含库函数stdlib.h。
下面进行测试,测试程序(源代码在本文末尾。)使用open()函数创建文件,因为要创建的文件已存在,而且使用了O_EXCL参数,因此open()会产生错误。结果如下:
edsionte@edsionte-laptop:~/code$ ./error
error: File exists with errno: 17
该方法可以详细显示错误信息以及错误代码。但不能显示错误出现的行数。