C 从fds_位提取文件描述符
我正在调试依赖于时间的bug(据我所知,这个bug是在执行数月后出现的)。我怀疑问题在于使用一组文件描述符调用C 从fds_位提取文件描述符,c,linux,debugging,posix,file-descriptor,C,Linux,Debugging,Posix,File Descriptor,我正在调试依赖于时间的bug(据我所知,这个bug是在执行数月后出现的)。我怀疑问题在于使用一组文件描述符调用pselect(),其中只包含“坏/坏”的描述符 我想做什么 为了重现错误,我想运行程序并删除它正在使用的文件描述符(0、1和2除外)。为了实现这一点,我想在程序运行时转到/proc//fd并取消文件描述器的链接 问题 当我用gdb调试程序时,提供给pselect()的文件描述符集如下所示: {fds_bits = {16384, 8, 0 <repeats 30 times>
pselect()
,其中只包含“坏/坏”的描述符
我想做什么
为了重现错误,我想运行程序并删除它正在使用的文件描述符(0、1和2除外)。为了实现这一点,我想在程序运行时转到/proc//fd
并取消文件描述器的链接
问题
当我用gdb调试程序时,提供给pselect()
的文件描述符集如下所示:
{fds_bits = {16384, 8, 0 <repeats 30 times>}}
{fds_位={16384,8,0}
有没有办法从
fds\u位
获取文件描述符?有没有其他方法来实现我想要做的事情?宏的作用是将数组的FD\U位解释为一个大的位字段。位n表示文件描述符n
因此,在第一个数组成员16384
(二进制1000000000000)中设置了位nr14,它表示文件描述符14
在第二个数组中,设置了成员8
(二进制1000),即第4位。数组成员的类型为unsigned long int
,因此在64位计算机上,fdbits[1]的最低有效位表示文件描述符64,因此设置位表示文件描述符68。在32位机器上,这将是fd36(32+4)
因此,您正在检查的fd集一起表示两个文件描述符14和68