08-处理来自库函数的错误
处理来自库函数的错误
不同的库函数在调用发生错误时,返回的数据类型和值也各不相同。(参见每个函数的手册页。)从错误处理的角度来说,可将库函数划分为以下几类。
- 某些库函数返回错误信息的方式与系统调用完全相同——返回值为−1,伴之以errno号来表示具体错误。remove()便是其中一例,可使用该函数来删除文件(调用unlink()系统调用)或目录(调用rmdir()系统调用)。对此类函数所发生的错误进行诊断,其方式与系统调用完全相同。
- 某些库函数在出错时会返回−1之外的其他值,但仍会设置errno来表明具体的出错情况。例如,fopen()在出错时会返回一个NULL指针,还会根据出错的具体底层系统调用来设置errno。函数perror()和strerror()都可用来诊断此类错误。
- 还有些函数根本不使用errno。对此类函数来说,确定错误存在与否及其起因的方法各不相同,可见诸于相应函数的手册页中,不应使用errno、perror()或strerror()来诊断错误。