Linux perror和strerror的区别

这篇博客探讨了在Linux线程编程中,如何正确处理错误信息。传统的错误检测方法如perror依赖于errno全局变量,而线程函数如pthread_mutex_init直接返回错误代码。因此,线程函数更倾向于使用strerror将返回的错误代码转换为易于理解的错误信息字符串。通过示例代码,作者展示了如何在线程函数中检查错误并提供清晰的错误反馈。
摘要由CSDN通过智能技术生成

线程函数中检测错误信息

最近看Linux中的线程时发现, 出错检测不用perror
先说结论:线程中检查错误方式为:

int ret = pthread_mutex_init(&mutex, NULL);
    if (ret != 0)
    {
        fprintf(stderr, "pthread_mutex_init: %s\n", strerror(ret));
        exit(1);
    }

而以前都是用如下方式:

int ret = bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));;
    if (ret != 0)
    {
        perror("bind error: ");
        exit(1);
    }

以前一直没注意过两者的区别

区别

perror
头文件:stdio.h
void perror(const char *msg);
它是基于errno的当前值,在标准错上产生一条出错信息,然后返回。
它先输出由msg字符串,然后是一个冒号后头接着对应于errno值的出错信息。

strerror
头文件:string.h
char * strerror(int errnum);
此函数将errnum(它通常就说errno值)映射为一个出错信息字符串,并返回错误此字符串

为何线程函数不用perror

两函数功能相同,但是运行原理不同,由于以往Linux下成功返回0,失败返回-1,挡出错时errno被系统自动设置为对应的错误号,perro根据错误号将其对应的错误信息字符串打印。

而线程函数成功返回0,失败直接返回错误号,因此不在用perror去捕捉系统的errno,而直接用strerror就能把返回的错误号转换为错误信息字符串。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

VioletEvergarden丶

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值