C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么fopen()或open()使用errno而不是只返回错误代码?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在通常情况下,open()返回新的文件描述符,如果发生错误,则返回-1,在这种情况下,适当地设置errno.

我不明白为什么在这里使用这个errno机制?这里的目的是什么?为什么我们无法映射所有错误与一些负回报否?

喜欢

fd = open("/dev/tty0",O_RDWR | O_SYNC);
if(fd == -1)
  printf("this is EACCES error");
else if (fd == -2)
    printf("this is EPERM error");

errno机制有什么好处吗?如果是的话,我想知道/理解,然后在其他事情我也可以使用这种机制.

解决方法

由于fopen返回一个FILE *,您不能指望它返回该指针中的错误代码:指针的唯一“特殊”值为0.

正如你所观察到的,为了打开这个限制是不成立的.事实上,系统作为linux完全按照你们在较低级别提出的建议.如果出现问题,系统调用将会返回负错误代码.那个(否定的)代码然后被一个浅的用户空间包装器插入到errno中,然后它返回-1来指示应用程序的错误.

这样做的原因纯粹是历史的.在好的旧时代,没有线程,而errno仍然只是一个简单的全局变量.当时所选择的策略没有太多的开销,也可能似乎是操作系统和应用程序之间通信的可接受的方式.由于这样的接口基本上不能改变而不会破坏大量的代码,所以我们会把errno作为线程本地的伪变量.

这不是理想的,但开销并不像听起来那么糟糕,因为这些显然是错误的指示,应该仅仅是特别地发生.

大佬总结

以上是大佬教程为你收集整理的为什么fopen()或open()使用errno而不是只返回错误代码?全部内容,希望文章能够帮你解决为什么fopen()或open()使用errno而不是只返回错误代码?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。