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 
void perror(const char *s);//perror - print a system error message

 

#include 
char *strerror(int errnum);//strerror return string describing error number

 实例:

#include

#include 
#include 
#include 

#include //维护errno全局变量
#include //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;
}

运行结果:

你可能感兴趣的:(嵌入式Linux应用编程)