[英]Who stole my file descriptors?
我正在学习socketpair()
函数。 该函数返回的文件描述符是5和6.如何检查分配给哪些文件/套接字描述符3和4?
Linux具体答案如下:
一种可能的方法是在sockerpair()
调用之后立即添加pause(3)
sockerpair()
调用。 这将暂停程序并让您有机会看看'/ proc / [程序的pid] / fd'。 那应该会给你一些关于那些其他开放文件描述符的信息。
为了改进Frederik Deweerdt的答案 (并假设一个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/
。
您也可以(1)整个程序。
顺便说一句,为什么你关心使用哪些文件描述符?
当然,你可以从你的程序内部读取linklink(2) /proc/self/fd/4
,以了解文件描述符4在其中的使用方式。 请注意, readlink
采用文件路径,而不是打开的文件描述符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.