linux文件描述符open file descriptors与open files的区别

一个文件被打开,也可能没有文件描述符,比如current working diretories,memory mapped files and executable text files ;losf可以查岀某个进程打开的文件数目:

[email protected] ~]# sh
sh-4.1# lsof |grep 1407
rpcbind   1407          rpc  cwd       DIR              253,0     4096          2 /
rpcbind   1407          rpc  rtd       DIR              253,0     4096          2 /
rpcbind   1407          rpc  txt       REG              253,0    54560     784900 /sbin/rpcbind
rpcbind   1407          rpc  mem       REG              253,0    65960    1439007 /lib64/libnss_files-2.12.so
rpcbind   1407          rpc  mem       REG              253,0    19536    1438997 /lib64/libdl-2.12.so
rpcbind   1407          rpc  mem       REG              253,0    36584    1438992 /lib64/libgssglue.so.1.0.0
rpcbind   1407          rpc  mem       REG              253,0   113432    1439001 /lib64/libnsl-2.12.so
rpcbind   1407          rpc  mem       REG              253,0  1923352    1438991 /lib64/libc-2.12.so
rpcbind   1407          rpc  mem       REG              253,0   142688    1439015 /lib64/libpthread-2.12.so
rpcbind   1407          rpc  mem       REG              253,0   166976    1438998 /lib64/libtirpc.so.1.0.10
rpcbind   1407          rpc  mem       REG              253,0    40792    1439080 /lib64/libwrap.so.0.7.6
rpcbind   1407          rpc  mem       REG              253,0   154664    1438979 /lib64/ld-2.12.so
rpcbind   1407          rpc    0u      CHR                1,3      0t0       3857 /dev/null
rpcbind   1407          rpc    1u      CHR                1,3      0t0       3857 /dev/null
rpcbind   1407          rpc    2u      CHR                1,3      0t0       3857 /dev/null
rpcbind   1407          rpc    3r      REG              253,0        0     133514 /var/run/rpcbind.lock
rpcbind   1407          rpc    4u     sock                0,6      0t0       9743 can‘t identify protocol
rpcbind   1407          rpc    5u     unix 0xffff88003742b480      0t0       9658 /var/run/rpcbind.sock
rpcbind   1407          rpc    6u     IPv4               9660      0t0        UDP *:sunrpc
rpcbind   1407          rpc    7u     IPv4               9662      0t0        UDP *:734
rpcbind   1407          rpc    8u     IPv4               9663      0t0        TCP *:sunrpc (LISTEN)
rpcbind   1407          rpc    9u     IPv6               9665      0t0        UDP *:sunrpc
rpcbind   1407          rpc   10u     IPv6               9667      0t0        UDP *:734
rpcbind   1407          rpc   11u     IPv6               9668      0t0        TCP *:sunrpc (LISTEN)
sh-4.1# lsof |grep 1407|wc -l
24

以下方法用于查询进程使用的文件 描述符的数目:

sh-4.1# ls -l /proc/1407/fd
total 0
lrwx------ 1 root root 64 Nov 23 10:26 0 -> /dev/null
lrwx------ 1 root root 64 Nov 23 10:26 1 -> /dev/null
lrwx------ 1 root root 64 Nov 23 10:26 10 -> socket:[9667]
lrwx------ 1 root root 64 Nov 23 10:26 11 -> socket:[9668]
lrwx------ 1 root root 64 Nov 23 10:26 2 -> /dev/null
lr-x------ 1 root root 64 Nov 23 10:26 3 -> /var/run/rpcbind.lock
lrwx------ 1 root root 64 Nov 23 10:26 4 -> socket:[9743]
lrwx------ 1 root root 64 Nov 23 10:26 5 -> socket:[9658]
lrwx------ 1 root root 64 Nov 23 10:26 6 -> socket:[9660]
lrwx------ 1 root root 64 Nov 23 10:26 7 -> socket:[9662]
lrwx------ 1 root root 64 Nov 23 10:26 8 -> socket:[9663]
lrwx------ 1 root root 64 Nov 23 10:26 9 -> socket:[9665]
sh-4.1# ls -l /proc/1407/fd|wc -l
13

进程1407总共打开24个文件,只占用了13个文件 描述符

查看文件描述符的设置:

sh-4.1# cat /proc/sys/fs/file-max
1000000
--该参数可以动态修改
时间: 2024-11-01 18:10:13

linux文件描述符open file descriptors与open files的区别的相关文章

【翻译自mos文章】在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log)

在unix/linux中使用文件描述符(File Descriptors)来找回被删掉的文件(数据文件or redo log) 参考原文: Retrieve deleted files on Unix / Linux using File Descriptors (Doc ID 444749.1) 适用于: Oracle Database - Enterprise Edition - Version 8.1.7.0 to 11.2.0.3 [Release 8.1.7 to 11.2] Linu

[性能分析]linux文件描述符(转)

1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l

[性能分析]linux文件描述符

1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l

文件描述符与FILE

1. 文件描述符(重点) 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3. 1.1概念介绍 文件描述符的操作(如: open(),creat(),cl

[转帖]linux文件描述符文件/etc/security/limits.conf

linux文件描述符文件/etc/security/limits.conf https://blog.csdn.net/fanren224/article/details/79971359 需要多学习了解一下. 文件描述符是什么?和文件句柄有啥区别? 文件描述符是linux/unix操作系统中特有的概念.相当于windows系统中的文件句柄.一个意思不同叫法. Linux系统中, 每当进程打开一个文件时,系统就为其分配一个唯一的整型文件描述符,用来标识这个文件.标准C中每个进程默认打开的有三个文

Linux 文件描述符问题

昨天解了个bug,关于文件描述符的,这种问题很久之前也遇到过,这次再犯真的不该. 问题是这样的. fopen()打开一个文件,然后做了一些操作,然后函数执行结束...没有调用fclose()导致了,再执行此函数时,系统提示,文件描述符分配完毕. 分析了下: 根据以前的知识储备, 1.linux打开文件描述符的最大个数为1024,根据这次发现, 2.这是针对于单独进程的, 3.是从/proc/{pid}/fd/这个文件夹下可以看到. 4.分配文件描述符是递增的顺序.(看我之前的博客会发现这是那个b

关于Linux文件描述符的笔记

当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符.所谓的文件描述符是一个低级的正整数.最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应.因此,函数 scanf() 使用 stdin,而函数 printf() 使用 stdout.你可以用不同的文件描述符改写默认的设置并重定向进程的 I/O 到不同的文件. 首先说什么是文件描述符,它有什么作用? 文件描述符是一个简单的整数,用以标明每一个被

Linux --- 文件描述符和重定向

1.预备知识 标准输入(stdin).标准输出(stdout)和标准错误(stderr)是编写脚本的时候经常使用的,因为输出的信息可能是上述的一种. 文件描述符 是与打开的某个文件或者数据流相关联的整数.文件描述符0,1,2是系统预留的. 0 - stdin(标准输入) 1 - stdout(标准输出) 2 - stderr(标准错误) 2.实例 echo This is a sample. > temp.txt 可将文本输出到 temp.txt 中,是通过截断文件的方式,也就是说在echo命令

Linux 文件描述符设置为非阻塞的方法

通过fcntl设置文件描述符属性 fcntl即F_SETFL,F_GETFL的使用,设置文件的flags,阻塞设置成非阻塞,非阻塞设置成阻塞(这连个在server开发中可以封装为基本函数) 1.获取文件的flags,即open函数的第二个参数: flags = fcntl(fd,F_GETFL,0); 2.设置文件的flags: fcntl(fd,F_SETFL,flags); 3.增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞: flags = fcntl(fd,F_GETFL,0