首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁偷了我的文件描述符?

谁偷了我的文件描述符?
EN

Stack Overflow用户
提问于 2015-05-16 18:03:51
回答 2查看 164关注 0票数 3

我正在学习一个socketpair()函数。该函数返回的文件描述符为5和6。如何检查分配给哪些文件/套接字描述符3和4?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-17 08:21:08

为了改进弗雷德里克·杜韦尔特的答复 (以及假设一个Linux系统),为了调试目的,您可以在成功调用套接字对(2)之后添加以下内容(对于Linux系统)(因此,在检查之后它没有失败):

代码语言:javascript
复制
 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采用的是文件路径,而不是打开的文件描述符。

票数 1
EN

Stack Overflow用户

发布于 2015-05-16 18:12:52

Linux的具体答案如下:

一种可能的方法是在pause(3)调用之后添加一个sockerpair()调用。这将暂停程序,并让您有机会查看程序/fd的'/proc/pid‘。这将为您提供关于其他打开的文件描述符的一些信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30279040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档