繁体   English   中英

谁偷了我的文件描述符?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM