我正在学习一个socketpair()函数。该函数返回的文件描述符为5和6。如何检查分配给哪些文件/套接字描述符3和4?
发布于 2015-05-17 08:21:08
为了改进弗雷德里克·杜韦尔特的答复 (以及假设一个Linux系统),为了调试目的,您可以在成功调用套接字对(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/目录。详情请参见proc(5)。
或者,如果程序运行在pid 1234的进程中,只需在其他终端中键入ls -l /proc/1234/fd/即可。
你也可以斯特拉斯(1)你的整个程序。
顺便问一下,为什么您关心使用哪个文件描述符?
当然,如果您希望从程序内部了解文件描述符4是如何使用的,您可以使用重新链接(2) /proc/self/fd/4。注意,readlink采用的是文件路径,而不是打开的文件描述符。
发布于 2015-05-16 18:12:52
Linux的具体答案如下:
一种可能的方法是在pause(3)调用之后添加一个sockerpair()调用。这将暂停程序,并让您有机会查看程序/fd的'/proc/pid‘。这将为您提供关于其他打开的文件描述符的一些信息。
https://stackoverflow.com/questions/30279040
复制相似问题