为什么 _SC_AIO_MAX 定义明确,而 sysconf(_SC_AIO_MAX) return -1?
Why _SC_AIO_MAX is well-defined while sysconf(_SC_AIO_MAX) return -1?
这是一个简单的演示:
#include <sys/stat.h>
#include <aio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
#ifdef _SC_AIO_MAX
printf("_SC_AIO_MAX is defined\n");
if (sysconf(_SC_AIO_MAX) == -1)
{
printf("unsupported\n");
printf("_SC_AIO_MAX = %d\n", _SC_AIO_MAX);
printf("sysconf(_SC_AIO_MAX) = %d\n", sysconf(_SC_AIO_MAX));
}
#else
printf("_SC_AIO_MAX is undefined\n");
#endif
return 0;
}
输出:
_SC_AIO_MAX is defined
unsupported
_SC_AIO_MAX = 24
sysconf(_SC_AIO_MAX) = -1
现场演示:https://wandbox.org/permlink/7GDzyvEUgRwMHX95
如您所见,_SC_AIO_MAX
定义为 24
,但 sysconf(_SC_AIO_MAX)
returns -1
。
根据man 3 sysconf
* If name corresponds to a maximum or minimum limit, and that limit is indeterminate, -1 is re‐
turned and errno is not changed. (To distinguish an indeterminate limit from an error, set er‐
rno to zero before the call, and then check whether errno is nonzero when -1 is returned.)
但是limit已经定义为24
,为什么sysconf还是return -1
?
_SC_AIO_MAX = 24
不是限制的值,它是您要访问的限制的标识符。
getconf(24) == -1
表示:
有错误(检查errno
看是否有错误);或
限制不确定。
一些文档提到您应该在调用 getconf
之前将 errno
设置为 0
以确保您可以区分这两种情况。
(2) 可能在功能可用但已被禁用等情况下发生
这是一个简单的演示:
#include <sys/stat.h>
#include <aio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
#ifdef _SC_AIO_MAX
printf("_SC_AIO_MAX is defined\n");
if (sysconf(_SC_AIO_MAX) == -1)
{
printf("unsupported\n");
printf("_SC_AIO_MAX = %d\n", _SC_AIO_MAX);
printf("sysconf(_SC_AIO_MAX) = %d\n", sysconf(_SC_AIO_MAX));
}
#else
printf("_SC_AIO_MAX is undefined\n");
#endif
return 0;
}
输出:
_SC_AIO_MAX is defined unsupported _SC_AIO_MAX = 24 sysconf(_SC_AIO_MAX) = -1
现场演示:https://wandbox.org/permlink/7GDzyvEUgRwMHX95
如您所见,_SC_AIO_MAX
定义为 24
,但 sysconf(_SC_AIO_MAX)
returns -1
。
根据man 3 sysconf
* If name corresponds to a maximum or minimum limit, and that limit is indeterminate, -1 is re‐
turned and errno is not changed. (To distinguish an indeterminate limit from an error, set er‐
rno to zero before the call, and then check whether errno is nonzero when -1 is returned.)
但是limit已经定义为24
,为什么sysconf还是return -1
?
_SC_AIO_MAX = 24
不是限制的值,它是您要访问的限制的标识符。
getconf(24) == -1
表示:
有错误(检查
errno
看是否有错误);或限制不确定。
一些文档提到您应该在调用 getconf
之前将 errno
设置为 0
以确保您可以区分这两种情况。
(2) 可能在功能可用但已被禁用等情况下发生