我不明白为什么在这里使用这个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而不是只返回错误代码?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)