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が返されます。なんで?