errno 的问题

2017-12-23 10:53:11 +08:00
 pkookp8
多线程进程,两个地方同时 open 一个文件失败,假设失败原因不同,失败后获取 errno
我没见过设置 errno 的函数以及打印函数会加锁的代码
理论上是不是会有问题
1380 次点击
所在节点    问与答
4 条回复
feather12315
2017-12-23 11:37:26 +08:00
第二次错误会覆盖第一次的,我没记错的话
sfqtsh
2017-12-23 11:47:54 +08:00
一般
#if !defined _LIBC || defined _LIBC_REENTRANT
/* When using threads, errno is a per-thread value. */
#define errno (*__errno_location ())
#endif
才能保证没问题
pkookp8
2017-12-23 12:10:59 +08:00
@sfqtsh 看了下 man errno 说是线程安全的,glibc 里也定义了__thread,猜测是每个线程都有一个 errno
但 c 库是如何寻找到本线程的 errno 的,看不懂
pkookp8
2017-12-23 12:12:02 +08:00
@feather12315 如上。应该是一个线程中,新的会覆盖旧的。多线程好像不会,待会儿试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/417010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX