从文件描述符来获取文件名
来源:互联网 发布:电信3g是什么网络模式 编辑:程序博客网 时间:2024/05/03 18:05
因为项目中一个小需求要从一个文件描述符中获取出文件描述符所指向的文件名
本来可以在接口中把文件描述符和文件名一起封装成一个结构来返回
但因为在别的地方也会这种应用,所以就想单独把从文件描述符获取文件名做成一个能用接口来使用
本接口只能在linux系统下使用,因为linux系统下所有的东西都可以当成文件来使用
主要使用了lsof指令来实现
lsof常用参数
lsof 常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。例如,linux限制了进程能够打开文件的数目。通常这个数值很大,所以不会产生问题,并且在需要时,应用程序可以请求更大的值(直到某个上限)。如果你怀疑应用程序耗尽了文件描述符,那么可以使用 lsof 统计打开的文件数目,以进行验证。lsof语法格式是:
lsof [options] filename
常用的参数列表:
lsof filename 显示打开指定文件的所有进程lsof -a 表示两个参数都必须满足时才显示结果lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件lsof -u username 显示所属user进程打开的文件lsof -g gid 显示归属gid的进程情况lsof +d /DIR/ 显示目录下被进程打开的文件lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长lsof -d FD 显示指定文件描述符的进程lsof -n 不将IP转换为hostname,缺省是不加上-n参数lsof -i 用以显示符合条件的进程情况lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 --> IPv4 or IPv6 protocol --> TCP or UDP hostname --> Internet host name hostaddr --> IPv4地址 service --> /etc/service中的 service name (可以不只一个) port --> 端口号 (可以不只一个)
lsof指令输出格式如下:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEinit 1 root cwd DIR 3,3 4096 2 /init 1 root rtd DIR 3,3 4096 2 /init 1 root txt REG 3,3 34352 13959233 /sbin/initinit 1 root mem REG 3,3 126648 9831535 /lib/ld-2.3.5.soinit 1 root mem REG 3,3 1489572 9831536 /lib/libc-2.3.5.soinit 1 root mem REG 3,3 81284 9830507 /lib/libsepol.so.1init 1 root mem REG 3,3 68864 9831549 /lib/libselinux.so.1init 1 root mem REG 0,0 0 [heap] (stat: No such file or directory)init 1 root 10u FIFO 0,13 1887 /dev/initctlsyslogd 1584 root 2w REG 3,3 438824 1574198 /var/log/messagessyslogd 1584 root 3w REG 3,3 1581 1574338 /var/log/securesyslogd 1584 root 4w REG 3,3 1678 1574346 /var/log/maillogsyslogd 1584 root 5w REG 3,3 10907 1574315 /var/log/cronsyslogd 1584 root 6w REG 3,3 0 1574365 /var/log/spoolersyslogd 1584 root 7w REG 3,3 0 1574363 /var/log/boot.logsyslogd 1584 root 8w REG 3,3 0 1606423 /var/log/news/news.critsyslogd 1584 root 9w REG 3,3 0 1606424 /var/log/news/news.err
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:
COMMAND:进程的名称PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等TYPE:文件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确切名称我们所关注的主要就是 FD列和NAME列可以用 lsof -d 8有如下结果syslogd 1584 root 8w REG 3,3 0 1606423 /var/log/news/news.crit可以看到文件描述符8对应的文件为 /var/log/news/news.crit在代码中,我们可以用popen来把这个指令的结果存到一个FILE的文件中然后按照一般文件操作方法来进行处理先用fgets 来读出一整行数据再用strtok 来把各个列的数据给读出来,直到取到NAME列数据这就是我们需要的数据了以上只是本人提供的一个思路,希望能对读到此文的朋友有点帮助
- 从文件描述符来获取文件名
- ubuntu下通过文件描述符来获取文件名
- linux c 通过文件描述符获取文件名
- linux下根据文件描述符获取出文件描述符所指向的文件名
- 文件描述符与文件名
- Java从文件路径中获取文件名
- 子进程关闭从父进程继承来的文件描述符
- 利用bat批处理来批量提取文件名_生成样本描述文件
- 从文件路径中获取文件名等信息
- 从文件路径中获取文件名等信息
- 从文件路径中获取文件名的方法
- 从文件路径中获取文件名(含格式)、文件类型、文件名
- 遍历文件 ,获取文件名
- 从一个路径,获取文件名
- 从FTP服务器返回来的TelnetInputStream流中读取文件的文件名,文件大小,文件日期
- 使用文件描述符存取打开文件与直接使用文件名相比有何优点?
- 根据文件句柄,获取文件名
- 根据文件句柄,获取文件名
- Page的IsCrossPagePostBack属性
- JavaScript string
- Apache 虚拟主机的配置[Ubuntu]
- 为什么ORM性能比iBATIS好?(作者:Javaeye Robbin)
- tar命令详解
- 从文件描述符来获取文件名
- 页面数据导出到Excel或者Word方法
- 简单C#验证类
- 数码相机正品识别
- 七年有多长
- 一个小工具---SPCamlEditor
- Nehalem微架构
- JavaScript Date
- Struts-config.xml配置文件讲解