红联Linux门户
Linux帮助

sysconf的使用方法及返回值从哪里调用

发布时间:2008-11-13 16:20:43来源:红联作者:xhl1101985
我刚学习这方面的知识,用电表述不清楚,请各位谅解!!!
谢谢
文章评论

共有 1 条评论

  1. dengwei19890716 于 2009-10-21 12:46:31发表:

    The Open Group Base Specifications Issue 6
    IEEE Std 1003.1, 2004 Edition
    Copyright © 2001-2004 The IEEE and The Open Group, All Rights reserved.

    --------------------------------------------------------------------------------

    NAME
    sysconf - get configurable system variables
    SYNOPSIS
    #include

    long sysconf(int name);


    DESCRIPTION
    The sysconf() function provides a method for the application to determine the current value of a configurable system limit or option ( variable). The implementation shall support all of the variables listed in the following table and may support others.

    The name argument represents the system variable to be queried. The following table lists the minimal set of system variables from or that can be returned by sysconf(), and the symbolic constants defined in that are the corresponding values used for name.

    Variable
    Value of Name

    {AIO_LISTIO_MAX}
    _SC_AIO_LISTIO_MAX

    {AIO_MAX}
    _SC_AIO_MAX

    {AIO_PRIO_DELTA_MAX}
    _SC_AIO_PRIO_DELTA_MAX

    {ARG_MAX}
    _SC_ARG_MAX

    {ATEXIT_MAX}
    _SC_ATEXIT_MAX

    {BC_BASE_MAX}
    _SC_BC_BASE_MAX

    {BC_DIM_MAX}
    _SC_BC_DIM_MAX

    {BC_SCALE_MAX}
    _SC_BC_SCALE_MAX

    {BC_STRING_MAX}
    _SC_BC_STRING_MAX

    {CHILD_MAX}
    _SC_CHILD_MAX

    Clock ticks/second
    _SC_CLK_TCK

    {COLL_WEIGHTS_MAX}
    _SC_COLL_WEIGHTS_MAX

    {DELAYTIMER_MAX}
    _SC_DELAYTIMER_MAX

    {EXPR_NEST_MAX}
    _SC_EXPR_NEST_MAX

    {HOST_NAME_MAX}
    _SC_HOST_NAME_MAX

    {IOV_MAX}
    _SC_IOV_MAX

    {LINE_MAX}
    _SC_LINE_MAX

    {LOGIN_NAME_MAX}
    _SC_LOGIN_NAME_MAX

    {NGROUPS_MAX}
    _SC_NGROUPS_MAX

    Maximum size of getgrgid_r() and
    _SC_GETGR_R_SIZE_MAX

    getgrnam_r() data buffers


    Maximum size of getpwuid_r() and
    _SC_GETPW_R_SIZE_MAX

    getpwnam_r() data buffers


    {MQ_OPEN_MAX}
    _SC_MQ_OPEN_MAX

    {MQ_PRIO_MAX}
    _SC_MQ_PRIO_MAX

    {OPEN_MAX}
    _SC_OPEN_MAX

    _POSIX_ADVISORY_INFO
    _SC_ADVISORY_INFO

    _POSIX_BARRIERS
    _SC_BARRIERS

    _POSIX_ASYNCHRONOUS_IO
    _SC_ASYNCHRONOUS_IO

    _POSIX_CLOCK_SELECTION
    _SC_CLOCK_SELECTION

    _POSIX_CPUTIME
    _SC_CPUTIME

    _POSIX_FSYNC
    _SC_FSYNC

    _POSIX_IPV6
    _SC_IPV6

    _POSIX_JOB_CONTROL
    _SC_JOB_CONTROL

    _POSIX_MAPPED_FILES
    _SC_MAPPED_FILES

    _POSIX_MEMLOCK
    _SC_MEMLOCK

    _POSIX_MEMLOCK_RANGE
    _SC_MEMLOCK_RANGE

    _POSIX_MEMORY_PROTECTION
    _SC_MEMORY_PROTECTION

    _POSIX_MESSAGE_PASSING
    _SC_MESSAGE_PASSING

    _POSIX_MONOTONIC_CLOCK
    _SC_MONOTONIC_CLOCK

    _POSIX_PRIORITIZED_IO
    _SC_PRIORITIZED_IO

    _POSIX_PRIORITY_SCHEDULING
    _SC_PRIORITY_SCHEDULING

    _POSIX_RAW_SOCKETS
    _SC_RAW_SOCKETS

    _POSIX_READER_WRITER_LOCKS
    _SC_READER_WRITER_LOCKS

    _POSIX_REALTIME_SIGNALS
    _SC_REALTIME_SIGNALS

    _POSIX_REGEXP
    _SC_REGEXP

    _POSIX_SAVED_IDS
    _SC_SAVED_IDS

    _POSIX_SEMAPHORES
    _SC_SEMAPHORES

    _POSIX_SHARED_MEMORY_OBJECTS
    _SC_SHARED_MEMORY_OBJECTS

    _POSIX_SHELL
    _SC_SHELL

    _POSIX_SPAWN
    _SC_SPAWN

    _POSIX_SPIN_LOCKS
    _SC_SPIN_LOCKS

    _POSIX_SPORADIC_SERVER
    _SC_SPORADIC_SERVER

    _POSIX_SS_REPL_MAX
    _SC_SS_REPL_MAX

    _POSIX_SYNCHRONIZED_IO
    _SC_SYNCHRONIZED_IO

    _POSIX_THREAD_ATTR_STACKADDR
    _SC_THREAD_ATTR_STACKADDR

    _POSIX_THREAD_ATTR_STACKSIZE
    _SC_THREAD_ATTR_STACKSIZE

    _POSIX_THREAD_CPUTIME
    _SC_THREAD_CPUTIME

    _POSIX_THREAD_PRIO_INHERIT
    _SC_THREAD_PRIO_INHERIT

    _POSIX_THREAD_PRIO_PROTECT
    _SC_THREAD_PRIO_PROTECT

    _POSIX_THREAD_PRIORITY_SCHEDULING
    _SC_THREAD_PRIORITY_SCHEDULING

    _POSIX_THREAD_PROCESS_SHARED
    _SC_THREAD_PROCESS_SHARED

    _POSIX_THREAD_SAFE_FUNCTIONS
    _SC_THREAD_SAFE_FUNCTIONS

    _POSIX_THREAD_SPORADIC_SERVER
    _SC_THREAD_SPORADIC_SERVER

    _POSIX_THREADS
    _SC_THREADS

    _POSIX_TIMEOUTS
    _SC_TIMEOUTS

    _POSIX_TIMERS
    _SC_TIMERS

    _POSIX_TRACE
    _SC_TRACE

    _POSIX_TRACE_EVENT_FILTER
    _SC_TRACE_EVENT_FILTER

    _POSIX_TRACE_EVENT_NAME_MAX
    _SC_TRACE_EVENT_NAME_MAX

    _POSIX_TRACE_INHERIT
    _SC_TRACE_INHERIT

    _POSIX_TRACE_LOG
    _SC_TRACE_LOG

    _POSIX_TRACE_NAME_MAX
    _SC_TRACE_NAME_MAX

    _POSIX_TRACE_SYS_MAX
    _SC_TRACE_SYS_MAX

    _POSIX_TRACE_USER_EVENT_MAX
    _SC_TRACE_USER_EVENT_MAX

    _POSIX_TYPED_MEMORY_OBJECTS
    _SC_TYPED_MEMORY_OBJECTS

    _POSIX_VERSION
    _SC_VERSION

    _POSIX_V6_ILP32_OFF32
    _SC_V6_ILP32_OFF32

    _POSIX_V6_ILP32_OFFBIG
    _SC_V6_ILP32_OFFBIG

    _POSIX_V6_LP64_OFF64
    _SC_V6_LP64_OFF64

    _POSIX_V6_LPBIG_OFFBIG
    _SC_V6_LPBIG_OFFBIG

    _POSIX2_C_BIND
    _SC_2_C_BIND

    _POSIX2_C_DEV
    _SC_2_C_DEV

    _POSIX2_CHAR_TERM
    _SC_2_CHAR_TERM

    _POSIX2_FORT_DEV
    _SC_2_FORT_DEV

    _POSIX2_FORT_RUN
    _SC_2_FORT_RUN

    _POSIX2_LOCALEDEF
    _SC_2_LOCALEDEF

    _POSIX2_PBS
    _SC_2_PBS

    _POSIX2_PBS_ACCOUNTING
    _SC_2_PBS_ACCOUNTING

    _POSIX2_PBS_CHECKPOINT
    _SC_2_PBS_CHECKPOINT

    _POSIX2_PBS_LOCATE
    _SC_2_PBS_LOCATE

    _POSIX2_PBS_MESSAGE
    _SC_2_PBS_MESSAGE

    _POSIX2_PBS_TRACK
    _SC_2_PBS_TRACK

    _POSIX2_SW_DEV
    _SC_2_SW_DEV

    _POSIX2_UPE
    _SC_2_UPE

    _POSIX2_VERSION
    _SC_2_VERSION

    {PAGE_SIZE}
    _SC_PAGE_SIZE

    {PAGESIZE}
    _SC_PAGESIZE

    {PTHREAD_DESTRUCTOR_ITERATIONS}
    _SC_THREAD_DESTRUCTOR_ITERATIONS

    {PTHREAD_KEYS_MAX}
    _SC_THREAD_KEYS_MAX

    {PTHREAD_STACK_MIN}
    _SC_THREAD_STACK_MIN

    {PTHREAD_THREADS_MAX}
    _SC_THREAD_THREADS_MAX

    {RE_DUP_MAX}
    _SC_RE_DUP_MAX

    {RTSIG_MAX}
    _SC_RTSIG_MAX

    {SEM_NSEMS_MAX}
    _SC_SEM_NSEMS_MAX

    {SEM_VALUE_MAX}
    _SC_SEM_VALUE_MAX

    {SIGQUEUE_MAX}
    _SC_SIGQUEUE_MAX

    {STREAM_MAX}
    _SC_STREAM_MAX

    {SYMLOOP_MAX}
    _SC_SYMLOOP_MAX

    {TIMER_MAX}
    _SC_TIMER_MAX

    {TTY_NAME_MAX}
    _SC_TTY_NAME_MAX

    {TZNAME_MAX}
    _SC_TZNAME_MAX

    _XBS5_ILP32_OFF32 (LEGACY)
    _SC_XBS5_ILP32_OFF32 (LEGACY)

    _XBS5_ILP32_OFFBIG (LEGACY)
    _SC_XBS5_ILP32_OFFBIG (LEGACY)

    _XBS5_LP64_OFF64 (LEGACY)
    _SC_XBS5_LP64_OFF64 (LEGACY)

    _XBS5_LPBIG_OFFBIG (LEGACY)
    _SC_XBS5_LPBIG_OFFBIG (LEGACY)

    _XOPEN_CRYPT
    _SC_XOPEN_CRYPT

    _XOPEN_ENH_I18N
    _SC_XOPEN_ENH_I18N

    _XOPEN_LEGACY
    _SC_XOPEN_LEGACY

    _XOPEN_REALTIME
    _SC_XOPEN_REALTIME

    _XOPEN_REALTIME_THREADS
    _SC_XOPEN_REALTIME_THREADS

    _XOPEN_SHM
    _SC_XOPEN_SHM

    _XOPEN_STREAMS
    _SC_XOPEN_STREAMS

    _XOPEN_UNIX
    _SC_XOPEN_UNIX

    _XOPEN_VERSION
    _SC_XOPEN_VERSION


    RETURN VALUE
    If name is an invalid value, sysconf() shall return -1 and set errno to indicate the error. If the variable corresponding to name has no limit, sysconf() shall return -1 without changing the value of errno. Note that indefinite limits do not imply infinite limits; see .

    Otherwise, sysconf() shall return the current variable value on the system. The value returned shall not be more restrictive than the corresponding value described to the application when it was compiled with the implementation's or . The value shall not change during the lifetime of the calling process, [XSI] except that sysconf(_SC_OPEN_MAX) may return different values before and after a call to setrlimit() which changes the RLIMIT_NOFILE soft limit.

    If the variable corresponding to name is dependent on an unsupported option, the results are unspecified.

    ERRORS
    The sysconf() function shall fail if:

    [EINVAL]
    The value of the name argument is invalid.

    --------------------------------------------------------------------------------

    The following sections are informative.
    EXAMPLES
    None.

    APPLICATION USAGE
    As -1 is a permissible return value in a successful situation, an application wishing to check for error situations should set errno to 0, then call sysconf(), and, if it returns -1, check to see if errno is non-zero.

    Application writers should check whether an option, such as _POSIX_TRACE, is supported prior to obtaining and using values for related variables, such as _POSIX_TRACE_NAME_MAX.

    RATIONALE
    This functionality was added in response to requirements of application developers and of system vendors who deal with many international system configurations. It is closely related to pathconf() and fpathconf().

    Although a conforming application can run on all systems by never demanding more resources than the minimum values published in this volume of IEEE Std 1003.1-2001, it is useful for that application to be able to use the actual value for the quantity of a resource available on any given system. To do this, the application makes use of the value of a symbolic constant in or .

    However, once compiled, the application must still be able to cope if the amount of resource available is increased. To that end, an application may need a means of determining the quantity of a resource, or the presence of an option, at execution time.

    Two examples are offered:

    Applications may wish to act differently on systems with or without job control. Applications vendors who wish to distribute only a single binary package to all instances of a computer architecture would be forced to assume job control is never available if it were to rely solely on the value published in this volume of IEEE Std 1003.1-2001.

    International applications vendors occasionally require knowledge of the number of clock ticks per second. Without these facilities, they would be required to either distribute their applications partially in source form or to have 50 Hz and 60 Hz versions for the various countries in which they operate.

    It is the knowledge that many applications are actually distributed widely in executable form that leads to this facility. If limited to the most restrictive values in the headers, such applications would have to be prepared to accept the most limited environments offered by the smallest microcomputers. Although this is entirely portable, there was a consensus that they should be able to take advantage of the facilities offered by large systems, without the restrictions associated with source and object distributions.

    During the discussions of this feature, it was pointed out that it is almost always possible for an application to discern what a value might be at runtime by suitably testing the various functions themselves. And, in any event, it could always be written to adequately deal with error returns from the various functions. In the end, it was felt that this imposed an unreasonable level of complication and sophistication on the application writer.

    This runtime facility is not meant to provide ever-changing values that applications have to check multiple times. The values are seen as changing no more frequently than once per system initialization, such as by a system administrator or operator with an automatic configuration program. This volume of IEEE Std 1003.1-2001 specifies that they shall not change within the lifetime of the process.

    Some values apply to the system overall and others vary at the file system or directory level. The latter are described in pathconf().

    Note that all values returned must be expressible as integers. String values were considered, but the additional flexibility of this approach was rejected due to its added complexity of implementation and use.

    Some values, such as {PATH_MAX}, are sometimes so large that they must not be used to, say, allocate arrays. The sysconf() function returns a negative value to show that this symbolic constant is not even defined in this case.

    Similar to pathconf(), this permits the implementation not to have a limit. When one resource is infinite, returning an error indicating that some other resource limit has been reached is conforming behavior.

    FUTURE DIRECTIONS
    None.

    SEE ALSO
    confstr(), pathconf(), the Base Definitions volume of IEEE Std 1003.1-2001, , , the Shell and Utilities volume of IEEE Std 1003.1-2001, getconf

    CHANGE HISTORY
    First released in Issue 3. Included for alignment with the POSIX.1-1988 standard.

    Issue 5
    The DESCRIPTION is updated for alignment with the POSIX Realtime Extension and the POSIX Threads Extension.

    The _XBS_ variables and name values are added to the table of system variables in the DESCRIPTION. These are all marked EX.

    Issue 6
    The symbol CLK_TCK is obsolescent and removed. It is replaced with the phrase "clock ticks per second".

    The symbol {PASS_MAX} is removed.

    The following changes were made to align with the IEEE P1003.1a draft standard:

    Table entries are added for the following variables: _SC_REGEXP, _SC_SHELL, _SC_REGEX_VERSION, _SC_SYMLOOP_MAX.

    The following sysconf() variables and their associated names are added for alignment with IEEE Std 1003.1d-1999:

    _POSIX_ADVISORY_INFO
    _POSIX_CPUTIME
    _POSIX_SPAWN
    _POSIX_SPORADIC_SERVER
    _POSIX_THREAD_CPUTIME
    _POSIX_THREAD_SPORADIC_SERVER
    _POSIX_TIMEOUTS

    The following changes are made to the DESCRIPTION for alignment with IEEE Std 1003.1j-2000:

    A statement expressing the dependency of support for some system variables on implementation options is added.

    The following system variables are added:

    _POSIX_BARRIERS
    _POSIX_CLOCK_SELECTION
    _POSIX_MONOTONIC_CLOCK
    _POSIX_READER_WRITER_LOCKS
    _POSIX_SPIN_LOCKS
    _POSIX_TYPED_MEMORY_OBJECTS

    The following system variables are added for alignment with IEEE Std 1003.2d-1994:

    _POSIX2_PBS
    _POSIX2_PBS_ACCOUNTING
    _POSIX2_PBS_LOCATE
    _POSIX2_PBS_MESSAGE
    _POSIX2_PBS_TRACK

    The following sysconf() variables and their associated names are added for alignment with IEEE Std 1003.1q-2000:

    _POSIX_TRACE
    _POSIX_TRACE_EVENT_FILTER
    _POSIX_TRACE_INHERIT
    _POSIX_TRACE_LOG

    The macros associated with the c89 programming models are marked LEGACY, and new equivalent macros associated with c99 are introduced.

    IEEE Std 1003.1-2001/Cor 1-2002, item XSH/TC1/D6/62 is applied, updating the DESCRIPTION to denote that the _PC* and _SC* symbols are now required to be supported. A corresponding change has been made in the Base Definitions volume of IEEE Std 1003.1-2001. The deletion in the second paragraph removes some duplicated text. Additional symbols that were erroneously omitted from this reference page have been added.

    IEEE Std 1003.1-2001/Cor 1-2002, item XSH/TC1/D6/63 is applied, making it clear in the RETURN VALUE section that the value returned for sysconf(_SC_OPEN_MAX) may change if a call to setrlimit() adjusts the RLIMIT_NOFILE soft limit.

    IEEE Std 1003.1-2001/Cor 2-2004, item XSH/TC2/D6/134 is applied, updating the DESCRIPTION to remove an erroneous entry for _POSIX_SYMLOOP_MAX. This corrects an error in IEEE Std 1003.1-2001/Cor 1-2002.

    IEEE Std 1003.1-2001/Cor 2-2004, item XSH/TC2/D6/135 is applied, removing _POSIX_FILE_LOCKING, _POSIX_MULTI_PROCESS, _POSIX2_C_VERSION, and _XOPEN_XCU_VERSION (and their associated _SC_* variables) from the DESCRIPTION and APPLICATION USAGE sections.

    IEEE Std 1003.1-2001/Cor 2-2004, item XSH/TC2/D6/136 is applied, adding _POSIX_SS_REPL_MAX, _POSIX_TRACE_EVENT_NAME_MAX, _POSIX_TRACE_NAME_MAX, _POSIX_TRACE_SYS_MAX, and _POSIX_TRACE_USER_EVENT_MAX (and their associated _SC_* variables) to the DESCRIPTION. The RETURN VALUE and APPLICATION USAGE sections are updated to note that if variables are dependent on unsupported options, the results are unspecified.

    IEEE Std 1003.1-2001/Cor 2-2004, item XSH/TC2/D6/137 is applied, removing _REGEX_VERSION and _SC_REGEX_VERSION.

    End of informative text.

    --------------------------------------------------------------------------------

    UNIX ® is a registered Trademark of The Open Group.
    POSIX ® is a registered Trademark of The IEEE.
    [ Main Index | XBD | XCU | XSH | XRAT ]
    --------------------------------------------------------------------------------