gpt4 book ai didi

linux - 关于 pthread_create 和文件描述符,我可以假设什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:35 26 4
gpt4 key购买 nike

我刚调试了一个程序,大致做了:

pthread_create(...);
close(0);
int t = open("/named_pipe");
assert(t == 0);

有时它会失败,因为 pthread_create 实际上会在新线程上短暂地打开文件描述符——特别是 /sys/devices/system/cpu/online——如果你在上面的 closeopen 之间发生了不幸,使得 t 不是 0。

执行此操作最安全的方法是什么?如果关于文件描述符的 pthread_create 有任何保证怎么办?我是否可以保证如果在我调用 pthread_create 之前打开了 3 个文件描述符,那么当它返回并且控制权已传递到新线程上的我的函数时也会有 3 个打开?

最佳答案

在多线程程序中,需要使用dup2 or dup3替换文件描述符。 close 后立即重用的旧技巧不再有效,因为其他线程随时创建文件描述符。此类文件描述符甚至可以由 glibc 隐式创建(和关闭),因为许多内核接口(interface)都使用文件描述符。

dup2 是标准接口(interface)。 Linux 也有 dup3,您可以使用它自动创建带有 O_CLOEXEC 标志集的文件描述符。否则,仍然会存在竞争条件,并且如果进程 fork 并执行新程序,则描述符可能会泄漏到子进程。

关于linux - 关于 pthread_create 和文件描述符,我可以假设什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com