Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39943
  • 博文数量: 17
  • 博客积分: 750
  • 博客等级: 军士长
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:39
文章分类
文章存档

2009年(17)

我的朋友

分类: LINUX

2009-11-01 12:19:09

每当在一个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




阅读(1279) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-05-03 11:43:00

no professional