導航:首頁 > 文件類型 > 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相關的資料

熱點內容
迷你編程七天任務的地圖怎麼過 瀏覽:844
word2003格式不對 瀏覽:86
百度雲怎麼編輯文件在哪裡 瀏覽:304
起名app數據哪裡來的 瀏覽:888
微信怎麼去泡妞 瀏覽:52
百度廣告html代碼 瀏覽:244
qq瀏覽器轉換完成後的文件在哪裡 瀏覽:623
jsp中的session 瀏覽:621
壓縮完了文件去哪裡找 瀏覽:380
武裝突襲3浩方聯機版本 瀏覽:674
網路機頂盒移動網路 瀏覽:391
iphone手機百度雲怎麼保存到qq 瀏覽:148
資料庫設計與實踐讀後感 瀏覽:112
js對象是什麼 瀏覽:744
網頁文件存pdf 瀏覽:567
文件夾正裝 瀏覽:279
剛復制的文件找不到怎麼辦 瀏覽:724
試運行適用於哪些體系文件 瀏覽:987
ghost文件復制很慢 瀏覽:967
傑德原車導航升級 瀏覽:240

友情鏈接