strerror函数的总结【转】

strerror()函数用于根据错误代码errnum获取错误原因的描述字符串。在多线程环境中,strerror不是线程安全的,而strerror_r()是线程安全的。当系统API调用如open()失败时,会设置errno全局变量,通过strerror或strerror_r可以获取错误信息。错误代码如EPERM、ENOENT等表示不同的错误情况,便于调试程序。
摘要由CSDN通过智能技术生成

本文转载自:https://www.cnblogs.com/xrcun/p/3210889.html

定义函数:char * strerror(int errnum);函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回.返回值:返回描述错误原因的字符串指针.

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

strerror与strerror_r()
#include <string.h>
char *strerror(int errnum);
int strerror_r(int errnum, char *buf, size_t n);
对于函数strerror_r,第一个参数errnum是错误代码,第二个参数buf是用户提供的存储错误描述的缓存,第三个参数n是缓存的大小。
strerror()不是线程安全的,strerror_r()是线程安全的。
在单线程的程序中,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);
char * mesg = strerror(errno);
printf("Mesg:%s\n",mesg);
}
exit(0);
}
dsp设备忙的话将输出如下:
errno=16
Mesg:Device or resource busy

errno.h中定义的错误代码值如下&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小庄老师

要是觉得不错,就给我点支持吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值