导航:首页 > 文件类型 > linux文件fd

linux文件fd

发布时间:2024-07-17 03:20:18

① 操作系统linux文件系统分析,代码中有个if((fd=open(file_sys,O_RDONLY)==-1)是什么意思啊,求大神

整行的意思是,如果打开文件失败就做处理。
分别
fd=open
把open的返回值付给fd
下面可以以fd代表(fd=open(file_sys,O_RDONLY)
fd==-1(表示open失败)

if(fd==-1)上面的条件成立

② linux 中 fd 最大多少

在Linux下,系统全部能够打开的fd总数为:
/proc/sys/fs/file-max,取决于内存
The file-max file /proc/sys/fs/file-max sets the maximum number of file-handles that the Linux kernel will allocate. We generally tune this file to improve the number of open files by increasing the value of /proc/sys/fs/file-max to something reasonable like 256 for every 4M of RAM we have: i.e. for a machine with 128 MB of RAM, set it to 8192 - 128/4=32 32*256=8192.
/proc/sys/fs/file-nr 记录系统中fd的使用情况,已分配文件句柄的数目
已使用文件句柄的数目
文件句柄的最大数目 ,
单个进程能够打开的最大fd数量为 ulimit -n, 可以通过sysconf(_SC_OPEN_MAX)获取默认的进程fd打开数量。
修改fd限制可以先修改shell的ulimit -n,
或者通过setrlimit函数进行修改:
void modifyfdlimit()
{
rlimit fdLimit;
fdLimit.rlim_cur = 30000;
fdLimit.rlim_max = 30000;
if (-1 == setrlimit (RLIMIT_NOFILE, &fdLimit))
{
printf ("Set max fd open count fai. /nl");
char cmdBuffer [64];
sprintf (cmdBuffer, "ulimit -n %d", 30000);
if (-1 == system (cmdBuffer))
{
printf("%s failed. /n", cmdBuffer);
exit(0);
}
if (-1 == getrlimit (RLIMIT_NOFILE, &fdLimit))
{
printf("Ulimit fd number failed.");
exit(0);
}
}
//printf("Hard limit: %d. Soft limit: %d", fdLimit.rlim_max, fdLimit.rlim_cur);
}

③ 鐩戣唂d鏁伴噺鐨勬枃浠舵槸

鐩戣唂d鏁伴噺鐨勬枃浠舵槸file-max銆傚洜涓哄湪linux绯荤粺涓鏌ョ湅select鍗曡繘绋嬬洃瑙唂d鏁伴噺鐨勬枃浠舵槸file-max銆傚崟涓杩涚▼鍙鐩戣嗙殑fd鏁伴噺琚闄愬埗锛屽嵆鑳界洃鍚绔鍙g殑鏁伴噺鏈夐檺锛屾暟鍊煎瓨鍦ㄥ備笅鏂囦欢閲岋細cat/proc/sys/fs/file-max銆

④ 【fd】Linux文件描述符

在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。

关于Linux下系统,进程能最大能打开的文件描述符数看过好多文章,但大都没有完整,详细说明每个值表示什么意思,在实践中该怎么设置?

如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作?

max-file 表示系统级别的能够打开的文件句柄的数量,是对整个系统的限制,并不是针对用户的。

ulimit -n 控制进程级别能够打开的文件句柄的数量,提供对shell及其启动的进程的可用文件句柄的控制,这是进程级别的。

对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。

一般如果遇到文件句柄达到上限时,会碰到"Too many open files"或者Socket/File: Can’t open so many files等错误。

相关的3个文件:
/proc/sys/fs/file-max
/proc/sys/fs/file-nr
/etc/security/limits.conf

/proc/sys/fs/file-max
Linux系统级别限制所有用户进程能打开的文件描述符总数。
max-file 表示系统级别的能够打开的文件句柄的数量,是对整个系统的限制,并不是针对用户的。

/etc/security/limits.conf
用户级别的限制是通过可以通过命令ulimit命令和文件/etc/security/limits.conf

/proc/sys/fs/file-nr 该参数是只读的,不能修改。

file-nr的值由3部分组成:
1,已经分配的文件描述符数;
2,已经分配但未使用的文件描述符数;
3,内核最大能分配的文件描述符数

/proc/${pid}/fd

众所周知,在相应进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd。
当然有些可能不是本进程自己打开的,如通过fork()从父进程继承而来的。

那么这个socket:后面的一串数字是什么呢?其实是该socket的inode号。

那么,知道了某个进程打开的socket的inode号后,我们可以做什么呢?
这就涉及到/proc/net/tcp(udp对应/proc/net/udp)文件了,其中也列出了相应socket的inode号通过比对此字段,我们能在/proc/net/tcp下获得此套接口的其他信息,如对应的<本地地址:端口号,远端地址:端口号>对,窗口大小,状态等信息。
具体字段含义详见net/ipv4/tcp_ipv4.c 中的 tcp4_seq_show 函数。

如果socket创建了,没有被使用,那么就只会在/proc/pid/fd下面有,而不会在/proc/net/下面有相关数据。

目录中的每一项都是一个符号链接,指向打开的文件,数字则代表文件描述符。
其中0 = /dev/null ,1 = stdout, 2 = stderr,用cat或tail查看即可。

Number of file descriptors: different between /proc/sys/fs/file-nr and /proc/$pid/fd?
https://serverfault.com/questions/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc-pi

Linux中最大文件描述符数
https://leokongwq.github.io/2016/11/09/linux-max-fd.html

How do linux file descriptor limits work?
https://stackoverflow.com/questions/3991223/how-do-linux-file-descriptor-limits-work

limits.conf(5) - Linux man page
https://linux.die.net/man/5/limits.conf

Why can't I tail -f /proc/$pid/fd/1 ?
https://unix.stackexchange.com/questions/152773/why-cant-i-tail-f-proc-pid-fd-1

Linux查看进程运行输出(/proc/<pid>/fd)
https://blog.csdn.net/u014756245/article/details/120023188

阅读全文

与linux文件fd相关的资料

热点内容
linux端口镜像 浏览:820
iphone5屏幕清尘 浏览:157
机顶盒密码怎么改 浏览:672
w7系统下载32位教程 浏览:618
pcb文件包括哪些内容 浏览:598
g00文件 浏览:607
用bat程序删除程序 浏览:516
dnf鬼泣90版本打安图恩 浏览:668
245倒角编程怎么计算 浏览:599
可以买生活用品的app有哪些 浏览:175
cad在c盘产生的文件夹 浏览:541
联想手机解锁工具 浏览:696
瑞银3887win10 浏览:833
学网络编程哪个好 浏览:805
手机vmos导入的文件在哪里 浏览:115
苹果手机可以把文件传到华为吗 浏览:63
海川化工下载的文件默认到哪里 浏览:343
学唱粤语歌app 浏览:975
qq游戏生死狙击玩不了 浏览:120
win10邮件不显示图片 浏览:922

友情链接