为什么fopen()或open()使用errno而不是只返回错误代码?

为什么fopen()或open()使用errno而不是只返回错误代码?,第1张

概述在通常情况下,open()返回新的文件描述符,如果发生错误,则返回-1,在这种情况下,适当地设置errno. 我不明白为什么在这里使用这个errno机制?这里的目的是什么?为什么我们无法映射所有错误与一些负回报否? 喜欢 fd = open("/dev/tty0", O_RDWR | O_SYNC);if(fd == -1) printf("this is EACCES error");e 在通常情况下,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而不是只返回错误代码?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存