strerror()函数是用于获取指定错误码对应的错误信息字符串的函数。它的声明为:
#include <string.h>
char *strerror(int errnum);
该函数接收一个整型参数errnum,表示错误码,然后返回一个指向错误信息字符串的指针。
使用strerror()函数时需要注意以下几点:
- 错误码errnum应该是标准C库定义的错误码,常见的如errno.h中定义的错误码。如果传入的errnum不是一个有效的错误码,则返回的字符串可能是不确定的。
- 返回的错误信息字符串通常是只读的,不能修改其内容。
- strerror()函数是线程不安全的,因为它使用了静态缓冲区来存储错误信息字符串,所以在多线程环境下并发调用可能会导致结果不可预测。在多线程程序中,建议使用strerror_r()函数。
strerror_r()函数是一种线程安全的版本,用于将错误码转换成错误信息字符串。它的声明为:
#include <string.h>
int strerror_r(int errnum, char *buf, size_t buflen);
该函数接收三个参数:errnum表示错误码,buf表示存储错误信息字符串的缓冲区,buflen表示缓冲区的大小。
strerror_r()函数的使用和注意事项如下:
- 根据传入的errnum,将错误信息字符串复制到buf中,并在最后自动添加一个空字符(‘\0’)。
- 如果转换成功,返回值为0;如果发生错误,返回值为一个非零错误码。
- 注意确保buf的大小足够容纳错误信息字符串,否则可能会导致截断。
- strerror_r()函数是线程安全的,可以在多线程环境中并发调用。
perror()函数用于将上一个系统调用的错误信息输出到标准错误流(stderr)中,并结尾添加一个换行符。它的声明为:
#include <stdio.h>
void perror(const char *s);
该函数接收一个参数s,表示要附加的错误信息字符串。
使用perror()函数时需要注意以下几点:
- perror()函数会根据全局变量errno的值来输出相应的错误信息。
- 输出格式为"s: error message\n",其中s为参数s指向的字符串。
- perror()函数只能输出上一次系统调用的错误信息,所以必须在调用错误发生后立即调用它才能正确输出。