收藏
75
23

strerror编辑

本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误。
外文名

strerror

语    言

C语言

参    数

错误标号(即error)

返回值

描述字符串(char *)

目录

1函数名

2函数作用

3头文件

4函数原型

5举例

1函数名编辑

strerror, _strerror, _wcserror, __wcserror

2函数作用编辑

Get a system error message (strerror, _wcserror) or prints a user-supplied error message (_strerror, __wcserror).
获取系统错误信息或打印用户程序错误信息。

3头文件编辑

#include <string.h>

4函数原型编辑

1
2
3
4
char*strerror(interrnum);
char*_strerror(constchar*strErrMsg);
wchar_t*_wcserror(interrnum);
wchar_t*__wcserror(constwchar_t*strErrMsg)

参数:
errnum:错误标号,通常用errno(标准错误号,定义在errno.h中)
Error number.
strErrMsg
User-supplied message.
返回:
指向错误信息的指针(即:错误的描述字符串)。

5举例编辑

例一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
intmain(void)
{
FILE*fp;
externinterrno;
char*message;
if(NULL==(fp=fopen("/dev/dsp","r+")))
{
printf("errno=%d\n",errno);
message=strerror(errno);
printf("Mesg:%s\n",message);
}
exit(0);
}

输出:
error=2
Mesg:No such file or direcory
例二:
// crt_perror.c
// compile with: /W1
/* This program attempts to open a file named
* NOSUCHF.ILE. Because this file probably doesn't exist,
* an error message is displayed. The same message is
* created using perror, strerror, and _strerror.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <share.h>
int main( void )
{
int fh;
if( _sopen_s( &fh, "NOSUCHF.ILE", _O_RDONLY, _SH_DENYNO, 0 ) != 0 )
{
/* Three ways to create error message: */
perror( "perror says open failed" );
printf( "strerror says open failed: %s\n",
strerror( errno ) ); // C4996
printf( _strerror( "_strerror says open failed" ) ); // C4996
// Note: strerror and _strerror are deprecated; consider
// using strerror_s and _strerror_s instead.
}
else
{
printf( "open succeeded on input file\n" );
_close( fh );
}
}
输出:
perror says open failed: No such file or directory
strerror says open failed: No such file or directory
_strerror says open failed: No such file or directory
转自 : http://baike.baidu.com/link?url=pllZsYxUR2EJ26CRuWn_F8x7cUimLjEi6g_tPsEnENMv3L4zzXhwqtQ1u7ry8IrHbCh29BbgJTVACTPfawZ1J_

linux下错误的捕获:errno和strerror的使用

 

经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。
    在程序代码中包含 #include <errno.h>,然后每次程序调用失败的时候,系统会自动用用错误代码填充errno这个全局变量,这样你只需要读errno这个全局变量就可以获得失败原因了。
    例如:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(void)
{
int fd;
extern int errno;

if((fd = open("/dev/dsp",O_WRONLY)) < 0)
{
   printf("errno=%d\n",errno);
}
  
exit(0);
}
如果dsp设备忙的话errno值将是16。

errno.h中定义的错误代码值如下:

查 看错误代码errno是调试程序的一个重要方法。当linuc C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。比较 麻烦的是每次都要去linux源代码里面查找错误代码的含义,现在把它贴出来,以后需要查时就来这里看了。
以下来自linux 2.4.20-18的内核代码中的/usr/include/asm/errno.h
#ifndef _I386_ERRNO_H
#define _I386_ERRNO_H
#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 /* Arg 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 */
#define EFAULT 14 /* Bad address */
#define ENOTBLK 15 /* Block device required */
#define EBUSY 16 /* Device or resource busy */
#define EEXIST 17 /* File exists */
#define EXDEV 18 /* Cross-device link */
#define ENODEV 19 /* No such device */
#define ENOTDIR 20 /* Not a directory */
#define EISDIR 21 /* Is a directory */
#define EINVAL 22 /* Invalid argument */
#define ENFILE 23 /* File table overflow */
#define EMFILE 24 /* Too many open files */
#define ENOTTY 25 /* Not a typewriter */
#define ETXTBSY 26 /* Text file busy */
#define EFBIG 27 /* File too large */
#define ENOSPC 28 /* No space left on device */
#define ESPIPE 29 /* Illegal seek */
#define EROFS 30 /* Read-only file system */
#define EMLINK 31 /* Too many links */
#define EPIPE 32 /* Broken pipe */
#define EDOM 33 /* Math argument out of domain of func */
#define ERANGE 34 /* Math result not representable */
#define EDEADLK 35 /* Resource deadlock would occur */
#define ENAMETOOLONG 36 /* File name too long */
#define ENOLCK 37 /* No record locks available */
#define ENOSYS 38 /* Function not implemented */
#define ENOTEMPTY 39 /* Directory not empty */
#define ELOOP 40 /* Too many symbolic links encountered */
#define EWOULDBLOCK EAGAIN /* Operation would block */
#define ENOMSG 42 /* No message of desired type */
#define EIDRM 43 /* Identifier removed */
#define ECHRNG 44 /* Channel number out of range */
#define EL2NSYNC 45 /* Level 2 not synchronized */
#define EL3HLT 46 /* Level 3 halted */
#define EL3RST 47 /* Level 3 reset */
#define ELNRNG 48 /* Link number out of range */
#define EUNATCH 49 /* Protocol driver not attached */
#define ENOCSI 50 /* No CSI structure available */
#define EL2HLT 51 /* Level 2 halted */
#define EBADE 52 /* Invalid exchange */
#define EBADR 53 /* Invalid request descriptor */
#define EXFULL 54 /* Exchange full */
#define ENOANO 55 /* No anode */
#define EBADRQC 56 /* Invalid request code */
#define EBADSLT 57 /* Invalid slot */
#define EDEADLOCK EDEADLK
#define EBFONT 59 /* Bad font file format */
#define ENOSTR 60 /* Device not a stream */
#define ENODATA 61 /* No data available */
#define ETIME 62 /* Timer expired */
#define ENOSR 63 /* Out of streams resources */
#define ENONET 64 /* Machine is not on the network */
#define ENOPKG 65 /* Package not installed */
#define EREMOTE 66 /* Object is remote */
#define ENOLINK 67 /* Link has been severed */
#define EADV 68 /* Advertise error */
#define ESRMNT 69 /* Srmount error */
#define ECOMM 70 /* Communication error on send */
#define EPROTO 71 /* Protocol error */
#define EMULTIHOP 72 /* Multihop attempted */
#define EDOTDOT 73 /* RFS specific error */
#define EBADMSG 74 /* Not a data message */
#define EOVERFLOW 75 /* Value too large for defined data type */
#define ENOTUNIQ 76 /* Name not unique on network */
#define EBADFD 77 /* File descriptor in bad state */
#define EREMCHG 78 /* Remote address changed */
#define ELIBACC 79 /* Can not access a needed shared library */
#define ELIBBAD 80 /* Accessing a corrupted shared library */
#define ELIBSCN 81 /* .lib section in a.out corrupted */
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
#define ELIBEXEC 83 /* Cannot exec a shared library directly */
#define EILSEQ 84 /* Illegal byte sequence */
#define ERESTART 85 /* Interrupted system call should be restarted */
#define ESTRPIPE 86 /* Streams pipe error */
#define EUSERS 87 /* Too many users */
#define ENOTSOCK 88 /* Socket operation on non-socket */
#define EDESTADDRREQ 89 /* Destination address required */
#define EMSGSIZE 90 /* Message too long */
#define EPROTOTYPE 91 /* Protocol wrong type for socket */
#define ENOPROTOOPT 92 /* Protocol not available */
#define EPROTONOSUPPORT 93 /* Protocol not supported */
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
#define EPFNOSUPPORT 96 /* Protocol family not supported */
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
#define EADDRINUSE 98 /* Address already in use */
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
#define ENETDOWN 100 /* Network is down */
#define ENETUNREACH 101 /* Network is unreachable */
#define ENETRESET 102 /* Network dropped connection because of reset */
#define ECONNABORTED 103 /* Software caused connection abort */
#define ECONNRESET 104 /* Connection reset by peer */
#define ENOBUFS 105 /* No buffer space available */
#define EISCONN 106 /* Transport endpoint is already connected */
#define ENOTCONN 107 /* Transport endpoint is not connected */
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
#define ETOOMANYREFS 109 /* Too many references: cannot splice */
#define ETIMEDOUT 110 /* Connection timed out */
#define ECONNREFUSED 111 /* Connection refused */
#define EHOSTDOWN 112 /* Host is down */
#define EHOSTUNREACH 113 /* No route to host */
#define EALREADY 114 /* Operation already in progress */
#define EINPROGRESS 115 /* Operation now in progress */
#define ESTALE 116 /* Stale NFS file handle */
#define EUCLEAN 117 /* Structure needs cleaning */
#define ENOTNAM 118 /* Not a XENIX named type file */
#define ENAVAIL 119 /* No XENIX semaphores available */
#define EISNAM 120 /* Is a named type file */
#define EREMOTEIO 121 /* Remote I/O error */
#define EDQUOT 122 /* Quota exceeded */
#define ENOMEDIUM 123 /* No medium found */
#define EMEDIUMTYPE 124 /* Wrong medium type */
#endif

同时也可以使用strerror()来自己翻译
如:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(void)
{
int fd;
extern int errno;

if((fd = open("/dev/dsp",O_WRONLY)) < 0)
{
   printf("errno=%d\n",errno);
char * mesg = strerror(errno);
   printf("Mesg:%s\n",mesg);
}
  
exit(0);
}
dsp设备忙的话将输出如下:
errno=16
Mesg:Device or resource busy

转自 http://www.douban.com/note/165931644/

转载于:https://www.cnblogs.com/IceSword-syy/p/4261834.html

strerror 函数相关推荐

  1. erron变量、strerror函数 和 perror 函数

    文章目录 一.erron变量 二.strerror 函数 三.perror 函数 一.erron变量 在 Linux 系统下对常见的错误做了一个编号,每一个编号都代表着每一种不同的错误类型,当函数执行 ...

  2. Strerror函数和Perror函数的介绍及使用

    Strerror 通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误. 需要引用的头文件 #include <errno.h> #include ...

  3. 进阶C语言------>字符函数和字符串函数------strerror函数

    strerror函数:寻找错误码 在我们程序运行的时候,如果出现错误会向erron全局错误信息返回错误码,类似我们登录网页出现404网页打不开的状态,而404就是一个错误码,erron接收错误码,而s ...

  4. strerror函数详解 看这一篇就够了-C语言(函数讲解、 使用用法举例、作用)

    strerror()函数用于:获取指向错误消息字符串的指针 函数介绍 函数声明: char * strerror ( int errnum ); 头  文  件:#include <string ...

  5. strerror函数

    strerror函数 在linux编程下, 经常看到很多的函数调用的返回值都会有一句话, 错误代码存放在errno中. 比如 : open() write() creat() 函数就会把错误原因放入e ...

  6. strtok、strerror函数讲解及用法

    目录 1. strtok 分割字符串 2. strerror 返回错误信息 1. strtok 分割字符串 strtok函数原型: char* strtok(char* str, const char ...

  7. 详解:strerror函数:将错误码转化为错误信息

    对于大家在浏览网页的时候,或多或少的会见识过不少的错误信息:比如:最常见的就是:404 但是,使用strerror函数,可以将错误码转化为错误信息!不知道偶然间看见的读者是否有兴趣进行深入研究一下,本 ...

  8. strlen strstr strtok strerror 函数解析及模拟实现

    文章目录 一.strlen 求字符串长度 1.函数介绍 2.模拟实现(三种方式) 二.strstr 字符串查找 1.函数介绍 2.模拟实现 三.strtok 字符串分割 四.strerror perr ...

  9. 【C库函数】strerror函数详解

    目录 strerror 函数原型 参数详解 返回值详解 函数讲解 strerror 返回错误码,所对应的错误信息 函数原型 char *strerror( int errnum ); 参数详解 参数 ...

  10. strerror函数介绍

    认识strerror 库函数调用失败的时候会产生错误码,而每一个错误码对应着一条错误信息,strerror函数的作用就是将错误码给转化成错误信息. 在C语言中有一条全局的错误码errno,在程序运行过 ...

最新文章

  1. 无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序
  2. openresty开发系列27--openresty中封装redis操作
  3. QT的QMessageAuthenticationCode类的使用
  4. 数据泄漏防御在企业的应用
  5. java 开源 网络流量统计_jpcap java流量监控
  6. 关于TCP的粘包问题
  7. 品质创新,江铃控股携手华天软件CAPP系统决战SUV中高端市场
  8. 100以内的偶数的个数_10以内数字的奇偶性认识
  9. Windows Phone 7知识锦分享【第二季】
  10. 服务器无线网卡ap软件,无线网卡虚拟成无线AP工具(将无线网卡虚拟成无线AP软件) 2017最新版...
  11. 手机邮箱怎么注册申请?教你用手机号如何注册电子邮箱地址
  12. 最近项目上遇到的问题~
  13. 搜狗输入法输入希腊字母
  14. 基于MATLAB中的GUI设计的钢琴界面设计并能发声
  15. Web性能技巧-超越基础
  16. intel更新13代桌面处理器产品线,更多核心更贵价格
  17. 世上安得两全法,不负如来不负卿?
  18. ios获取所有相册的视频并播放
  19. Centos7 修改SSH端口,以及修改密码
  20. VUE不兼容显卡问题

热门文章

  1. iAd将成苹果下一个金蛋 年收益或超46亿美元;银联与运营商发力手机支付 资本市场已被搅动(每日关注:20100419)...
  2. sqlserver语句创建表
  3. easyui 导出excel 不导出隐藏列
  4. java随机组卷和手动组卷功能实现
  5. 使用php和Amazon S3 sdk上传及下载文件
  6. 数据中心发展现状与趋势
  7. Himall商城企业付款通知
  8. czide-CALLAN自制语言(python)
  9. 程序员到底有多可爱?笑死我了!
  10. 10行python代码制作笑死人不偿命的倒放gif