我正在学习一个socketpair()
函数。该函数返回的文件描述符分别为5和6。如何检查将描述符3和4分配给了哪些文件/套接字?
Linux特定的答案如下:
一种可能的方式是在sockerpair()
呼叫之后立即添加pause(3)
呼叫。这将暂停程序,并让您有机会查看"/proc/[pid of the program]/fd"。这应该会为您提供一些关于其他打开文件描述符的信息。
为了改进Frederik Dewerdt的回答(并假设是Linux系统(,出于调试目的,您可以在对socketpair(2(的成功调用后添加以下内容(对于Linux系统((因此在检查后它没有失败(:
char cmdbuf[64];
snprintf (cmdbuf, sizeof(cmdbuf),
"/bin/ls -l /proc/%d/fd/", (int) getpid());
system(cmdbuf);
但这只是一个恶心的调试破解。如果你真的想从你正在运行的程序中获得这样的信息(当然opendir
会使用一个文件描述符来读取目录…(,你可能会先打开dir(3(,然后再读取/proc/self/fd/
目录(不要忘记closedir
(。有关详细信息,请参阅proc(5(。
或者,如果您的程序在pid 1234的进程中运行,只需在其他终端中键入ls -l /proc/1234/fd/
即可。
你也可以简化你的整个程序。
顺便说一句,你为什么关心使用哪些文件描述符?
当然,如果您想从程序内部了解文件描述符4是如何使用的,您可以读取link(2(/proc/self/fd/4
。请注意,readlink
采用文件路径,而不是打开的文件描述符。