据我所知,我正在调试时间相关的bug (据我所知,mthe在执行几个月后出现)。我怀疑问题是使用一组文件描述符调用pselect(),其中只包含“坏/坏”的文件描述符。
我想做什么
为了重现错误,我想运行这个程序并删除它使用的文件描述符(除了0、1和2)。为了实现这一点,我希望在程序运行时,转到/proc/<pid>/fd并取消文件解链接程序。
问题所在
当我用gdb调试程序时,提供给pselect()的一组文件描述符如下:
{fds_bits = {16384, 8, 0 <repeats 30 times>}}有任何方法从fds_bits获取文件描述符吗?还有其他方法来实现我想做的事吗?
发布于 2017-01-23 14:38:11
宏、FD_ISSET(nr, set)等基本上是将数组fds_bits解释为一个大的位字段。位n表示文件复制者n。
因此,在第一个数组成员16384 (二进制100000000000000)位nr 14中,设置了nr 14,它表示文件捕获器14。
在第二个数组成员8 (二进制1000)被设置,这是第4位。数组成员是unsigned long int类型的,因此在64位计算机上,最不重要的fdbits1位表示filedescriptor 64,因此set位代表filedescriptor 68。在32位机器上,这将是fd 36 (32 + 4).
因此,您正在检查的fd集一起代表了两个文件编制者14和68。
https://stackoverflow.com/questions/41808346
复制相似问题