让我们来详细讲解一下 C 标准库 errno.h
的使用攻略。
什么是 errno?
errno
是 C 标准库中的一个全局变量,其类型为 int
,用于表达函数或操作的错误码(错误编号)。如果一个函数或操作执行出错,其返回值可能无法明显地反映错误的信息,此时可以通过 errno
变量获取更详细的错误信息。errno
的具体取值由库函数或系统调用设置。
系统调用是 Linux 操作系统中的一种机制,用户进程可以通过系统调用向操作系统内核(kernel)请求某些任务,如:文件操作、网络操作等。如果系统调用失败,则它们通常会将 errno
设置为一个非零值来指示失败类型。
errno.h 头文件
errno
变量及与其相关的宏定义都定义在 C 标准库头文件 errno.h
中。因此,在使用 errno
时需要包含该头文件。
#include <errno.h>
errno 的使用
使用 errno
变量获取错误码的基本步骤如下:
- 在使用可能出错的函数后判断其返回值是否有错误(通常为 -1,但也有例外),如果有,说明可能存在错误。
- 在需要获取错误码的位置检查
errno
变量的值,如果errno
值为非零值,说明出现了错误。可以通过perror()
或strerror()
函数将错误输出到标准错误输出(stderr)中,并清除errno
的值,以便后续的调用不受影响。 - 根据需要进行错误处理。
下面分别介绍如何使用 perror()
和 strerror()
函数进行错误处理。
perror()
perror()
函数可以将 errno
对应的错误信息输出到标准错误输出(stderr)中,同时可以自定义前缀信息。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main(void) {
FILE *fp = fopen("notexist.txt", "r");
if (fp == NULL) {
perror("fopen() error");
}
return 0;
}
输出结果:
fopen() error: No such file or directory
strerror()
strerror()
函数可以将一个错误码转化为对应的错误信息。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int main(void) {
FILE *fp = fopen("notexist.txt", "r");
if (fp == NULL) {
fprintf(stderr, "Error: %s\n", strerror(errno));
}
return 0;
}
输出结果:
Error: No such file or directory
示例说明
示例一:文件读取错误
在为文件打开或创建时,发生错误时都会涉及 errno
变量。下面以文件读取为例进行说明。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int get_file_size(const char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
fprintf(stderr, "Error: %s\n", strerror(errno));
return -1;
}
fseek(fp, 0L, SEEK_END);
int size = ftell(fp);
fclose(fp);
return size;
}
int main(void) {
int size = get_file_size("notexist.txt");
if (size == -1) {
return 1;
}
printf("The size of file is: %d\n", size);
return 0;
}
输出结果:
Error: No such file or directory
示例二:内存分配错误
在进行内存动态分配时,如果分配失败,会涉及 errno
变量。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define MAX_SIZE (1024 * 1024 * 1024)
int main(void) {
int *ptr = malloc(MAX_SIZE);
if (ptr == NULL) {
fprintf(stderr, "Error: %s\n", strerror(errno));
return 1;
}
free(ptr);
return 0;
}
输出结果:
Error: Cannot allocate memory
以上就是 errno.h
的使用攻略,希望能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 标准库 errno.h - Python技术站