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
,它是内核对相应资源强制执行的值。
最大限制,称为rlim_cur
,这是一个未被授权的用户可以设置rlim_max
的上限值。
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/