How to use lsof(List Opened Files) in a C/C++ appl

2020-03-19 15:21发布

Is there any way to get all opened sockets using ? I know the lsof command and this is what I'm looking for, but how to use it in a application?

The idea is to get the FD of an opened socket by its port number and the pid.

4条回答
狗以群分
2楼-- · 2020-03-19 15:24
神经病院院长
3楼-- · 2020-03-19 15:37

If you don't want to copy/paste or reimplement chunks of the lsof code, and it doesn't build any useful libraries you could leverage, you can still open a pipe to an lsof process and peruse its output.

查看更多
太酷不给撩
4楼-- · 2020-03-19 15:49

Just open the files in /proc/net, like /proc/net/tcp, /proc/net/udp, etc. No need to slog through the lsof sources. :)

查看更多
对你真心纯属浪费
5楼-- · 2020-03-19 15:50

The lsof command is prepared specifically such that it can be used from other programs including C, see the section: OUTPUT FOR OTHER PROGRAMS of man lsof for more information. For example you can invoke lsof with -F p and it will output the pid of the processes prefixed with 'p':

$ lsof -F p /some/file
p1234
p4321

you can then use popen to execute this commmand in a child process and read from its standard output.

查看更多
登录 后发表回答