gpt4 book ai didi

c - dup2() 函数的 max_fd 数是多少?

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:45 24 4
gpt4 key购买 nike

int main()
{
int err1, err2;
struct rlimit rlim;

err = getrlimit(RLIMIT_NOFILE, &rlim);
printf("max_fds: %d\n", rlim.rlim_max); // 4096

err1 = dup2(1, 1023); // OK
err2 = dup2(2, 4090); // error: EBADF

return 0;
}

像上面的代码一样,我使用 getrlimit 获取每个进程打开文件的最大数量,它打印 4096。但是,当我将大于 1023 的 newfd 传递给 dup2() 时,它总是返回错误 EBADF。为什么?

最佳答案

getrlimit() 返回一个包含两个值的结构 rlimit:

  • current 限制,称为 rlim_cur,这是内核为相应资源强制执行的值。
  • 最大限制,称为rlim_max,这是非特权用户可以将rlim_cur设置为的上限值。

tl;dr,使用rlim_cur!

printf("max_fds: %d\n", rlim.rlim_cur); // probably 1024 by default on most distribs

关于c - dup2() 函数的 max_fd 数是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com