欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【Socket网络编程】14. perror()、errno 的使用

发布时间:2025/3/21 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Socket网络编程】14. perror()、errno 的使用 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
经常会在socket网络编程时看到errno和perror(),他们是什么呢?
函数定义:
void perror(const char *s); perror ("open_port");

他是c语言库函数,需要包含头文件(不可以掉了这个头文件):

#include <stdio.h> //包含perror的头文件
函数说明

perror ( )用 来 将 上 一 个函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno的值来决定要输出的字符串。
  
  在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror()函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。
  errno 是记录系统的最后一次 错误代码 。代码是一个int型的值,在errno.h中定义。
  只有当一个 库函数失败时,errno才会被设置。当函数成功运行时,errno的值不会被修改。这意味着我们不能通过测试 errno 的值来判断是否有错误存在。反之,只有当被调用的函数提示有错误发生时检查 errno 的值才有意义。
查看 错误代码 errno 是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。

举例:
#include <stdio.h>//包含perror的头文件 #include <process.h> #include <direct.h>//包含mkdir、rmdir的头文件 #include <iostream> using namespace std; int main(void) {int status;system("cls");//清屏status = mkdir("cam");//创建文件夹,创建成功则返回0,否则返回-1cout << status << endl;(!status) ? (printf("Directory created\n")) : (perror("Unable to create directory\n"));//!status不等于0为真,结果为第一个,否则为第二个system("pause");//屏幕暂停system("dir"); /*显示创建后当前文件夹下的文件信息*/status = rmdir("cam"); /*删除创建的文件夹book*/(!status) ? (printf("Directory deleted\n")) :(perror("Unable to delete directory"));system("pause");return 0; }


运行结果:


如果我们的文件夹已经存在,仍然使用mkdir函数创建文件夹时,会发生什么呢?(此时perror函数就会发挥作用)


因为cam文件夹已经存在,所以mkdir返回-1,perror除了输出:Unable to create directory,后面紧跟着具体原因:File exists

总结

以上是生活随笔为你收集整理的【Socket网络编程】14. perror()、errno 的使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。