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