Linux errno 23和Linux errno 24之间的区别

bad*_*dri 12 c sockets linux errno error-code

  1. 这2个linux错误有errno.h什么区别?23和24

    我尝试了2个不同的网站,但无法理解两者之间的区别.


    [EMFILE]
    Too many open files.
    [ENFILE]
    Too many files open in system.
    
    Run Code Online (Sandbox Code Playgroud)
    # define ENFILE      23  /* File table overflow */
    # define EMFILE      24  /* Too many open files */
    
    Run Code Online (Sandbox Code Playgroud)
  2. 此外,我得到错误24和套接字呼叫在第974次失败.(AF_INETUDP数据报套接字)

    当我做了一个cat /proc/sys/fs/file-max我看到值334076 ulimit -n显示1024

    知道可以做些什么来增加限制吗?

Woj*_*wka 12

对于1)两个错误代码都与打开的文件太多有关.EMFILE在您的进程中打开的文件太多.ENFILE在整个系统中打开的文件太多.


Ste*_*ger 7

您可以增加打开文件/文件描述符的最大数量

sysctl -w fs.file-max=100000
Run Code Online (Sandbox Code Playgroud)

或者打开

/etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

并将 fs.file-max 附加/更改为您需要的数字:

fs.file-max = 100000
Run Code Online (Sandbox Code Playgroud)

然后运行

sysctl -p
Run Code Online (Sandbox Code Playgroud)

重新加载新设置

如果不想设置系统范围的 FD(文件描述符)限制,可以设置用户级 FD 限制。

你需要编辑 /etc/security/limits.conf file

对于用户 YOUR_USER,添加以下行:

YOUR_USER soft nofile 4096
YOUR_USER hard nofile 10240
Run Code Online (Sandbox Code Playgroud)

为用户 YOUR_USER 设置软限制和硬限制。
保存并关闭文件。

要查看用户 YOUR_USER 的硬限制和软限制:

su - YOUR_USER

ulimit -Hn
ulimit -Sn
Run Code Online (Sandbox Code Playgroud)