(1)errno就是error number,是由OS來維護的一個全局變量,任何OS內部函數都可以通過設置errno來告訴上層調用者究竟剛纔發生了一個什麼錯誤。linux系統中對各種常見錯誤做了個編號,當函數執行錯誤時,函數會返回一個特定的errno編號來告訴我們這個函數到底哪裏錯了。
(2)errno本身實質是一個int類型的數字,舉例如下,每個數字編號對應一種錯誤。
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Argument list too long */
我們可以直接把這個數子打印出來,但是不太容易理解,最好的是把數子對應的錯誤信息打印出來,操作系統給我們提供了兩個API:perror()和strerror()
#include <stdio.h>
void perror(const char *s);//perror - print a system error message
#include <string.h>
char *strerror(int errnum);//strerror return string describing error number
實例:
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>//維護errno全局變量
#include <string.h>//strerror函數使用
int main(void)
{
int fd = -1; // fd 就是file descriptor,文件描述符
// 第一步:打開文件
fd = open("c.txt", O_RDWR);
if (-1 == fd)
{
perror("文件打開錯誤");
printf("error num:%d\r\n",errno);
printf("%s\n", strerror(errno));
_exit(-1);
}
else
{
printf("文件打開成功,fd = %d.\n", fd);
}
return 0;
}
運行結果: