每当在一个unix函数中发生错误时,全局变量errno将被自动置成一个指示错误类型的正值,函数本身则通常返回-1。不同的值表示不同的含义,可以通过查看该值推测出错的原因,调试程序。
errno的值只在函数发生错误时设置,如果函数不返回错误,errno的值就是未定义的。errno的值通常在
中定义。形式如下:
#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 */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
#define EACCES 13 /* Permission denied */
......
从1开始,共100多个。
要查看errno的返回值,可通过下面两个函数:
#include
void perror(const char *msg);//输出格式为:msg:errno对应的错误信息(加上一个换行符);
#include
char *strerror(int errnum);//通过参数 errnum (就是errno),返回errno对应的错误信息。
#include
#include
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
char *buf;
if( (fp = fopen(argv[1], "r")) == NULL)
{
perror("perror");
errno = 12;
printf("strerror: %s\n", strerror(errno));
exit(1);
}
perror("perror");
errno = 13;
printf("strerror: %s\n", strerror(errno));
fclose(fp);
return 0;
}
--------------------------------------------------------------------
输入一个存在的文件名,如:./a.out 111
open失败则会输出:
perror: No such file or directory
strerror: Cannot allocate memory
open成功则会输出:
perror: Success
strerror: Permission denied
阅读(1290) | 评论(1) | 转发(0) |