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

===============>>#1 票数:3

Linux具体答案如下:

一种可能的方法是在sockerpair()调用之后立即添加pause(3) sockerpair()调用。 这将暂停程序并让您有机会看看'/ proc / [程序的pid] / fd'。 那应该会给你一些关于那些其他开放文件描述符的信息。

===============>>#2 票数:1 已采纳

为了改进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采用文件路径,而不是打开的文件描述符。

  ask by japan translate from so

未解决问题?本站智能推荐:

3回复

UNIX文件描述符重用

虽然我已经习惯使用UNIX并且已经对它进行了很长时间的编程,但我并不习惯于文件操作。 我知道0/1/2文件描述符是标准输入,输出和错误。 我知道无论何时进程打开一个文件,它都会被赋予一个具有最小值但尚未使用的描述符 - 我理解使用dup / dup2的一些事情。 我对进程之间的文件
2回复

使用打开的文件描述符

我有2个程序,其中一个我正在打开一个文件来读取,而另一个我正在尝试从file中读取: 第一个程序 第二程序: 在第二个程序中,我阅读了在第一个程序中打印的内容。 为什么此代码不起作用,如何从程序nr 2中读取该文件描述符?
4回复

如何保留文件描述符?

我正在写一个基于curses的程序。 为了使我更容易找到该程序中的错误,我想产生调试输出。 由于程序已经在终端上显示了用户界面,因此无法在其中放置调试输出。 相反,我计划无条件地将调试输出写入文件描述符3。 您可以将程序作为program 3>/dev/ttyX其中/dev/t
2回复

复制epoll文件描述符

有没有办法复制使用epoll_create创建的文件描述符,以便可以独立修改副本(使用epoll_ctl添加/删除监视文件描述符)。 例如,我创建一个epoll文件描述符A ,它等待文件P和Q上的事件。 我将其复制到epoll文件描述符B ,并使B也等待文件R上的事件。 调用epoll
1回复

文件描述符标志和功能

我想知道在函数中使用给定的file_des时O_NONBLOCK标志会发生什么。 是否保留设置标志? 如果没有,我应该在function内部重设它吗? 还有其他办法吗?
1回复

作为子进程,如何知道哪个文件描述符是父文件描述符

我试图编写一个程序,该程序分叉并等待他的孩子完成,然后该孩子对输入进行一些工作,然后以与父级相同的方式进行分叉,依此类推。 现在,我知道分叉将子文件描述符数组复制到子目录,并且我应该关闭与父目录关联的文件描述符,但是我无法弄清楚哪些是父目录。 我需要给我的孩子父母pid吗? 在一个
1回复

write():错误的文件描述符

我正在尝试学习POSIX中的基本IO函数,我编写了以下代码,但它不起作用,当我尝试执行代码时返回“错误的文件描述符”错误: 我想以O_APPEND模式写入文件。 但:
1回复

管道:错误的文件描述符

我知道以前曾问过这类帖子,但是它们的级别显然比我想的要高,在阅读他们的帖子后仍然看不到它,因此我决定从这里再次发布此问题。 我正在学习使用管道进行的多进程通信,我遇到了称为错误文件描述符的错误,我不明白为什么我的代码中存在此错误。 } 当我完成编译并运行可执行文件时,它只是告
2回复

文件描述符和过程关系

文件描述符是相对于进程还是相对于操作系统? 我基本上想知道的是,如果在ac程序中打开文件,并且为该文件分配了文件描述符值,可以说是103,那么当我在其他c程序中使用文件描述符103打开文件时,我是指同一文件还是其他文件?
1回复

如果isatty(1)为1,则获取文件描述符

我试图确定我的程序是否以非交互方式运行。 所以,如果执行看起来像这样./foo.c <script.sh我如何获取script.sh并用fopen打开它? 这是argv [1],如果是,我如何摆脱“ <”? 我当前的代码