strerror()、perror()、errno

(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;
}

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章