Man Linux: Main Page and Category List

NAME

       fpathconf, pathconf - get configurable pathname variables

SYNOPSIS

       #include <unistd.h>

       long fpathconf(int fildes, int name);
       long pathconf(const char *path, int name);

DESCRIPTION

       The  fpathconf()  and  pathconf() functions shall determine the current
       value of a configurable limit or option (variable) that  is  associated
       with a file or directory.

       For  pathconf(),  the path argument points to the pathname of a file or
       directory.

       For fpathconf(), the fildes argument is an open file descriptor.

       The name argument represents the variable to  be  queried  relative  to
       that  file  or  directory.  Implementations  shall  support  all of the
       variables listed in the following table and  may  support  others.  The
       variables in the following table come from <limits.h> or <unistd.h> and
       the symbolic constants, defined in <unistd.h>,  are  the  corresponding
       values used for name.

          Variable                    Value of name           Requirements
          {FILESIZEBITS}              _PC_FILESIZEBITS        3,4
          {LINK_MAX}                  _PC_LINK_MAX            1
          {MAX_CANON}                 _PC_MAX_CANON           2
          {MAX_INPUT}                 _PC_MAX_INPUT           2
          {NAME_MAX}                  _PC_NAME_MAX            3,4
          {PATH_MAX}                  _PC_PATH_MAX            4,5
          {PIPE_BUF}                  _PC_PIPE_BUF            6
          {POSIX_ALLOC_SIZE_MIN}      _PC_ALLOC_SIZE_MIN
          {POSIX_REC_INCR_XFER_SIZE}  _PC_REC_INCR_XFER_SIZE
          {POSIX_REC_MAX_XFER_SIZE}   _PC_REC_MAX_XFER_SIZE
          {POSIX_REC_MIN_XFER_SIZE}   _PC_REC_MIN_XFER_SIZE
          {POSIX_REC_XFER_ALIGN}      _PC_REC_XFER_ALIGN
          {SYMLINK_MAX}               _PC_SYMLINK_MAX         4,9
          _POSIX_CHOWN_RESTRICTED     _PC_CHOWN_RESTRICTED    7
          _POSIX_NO_TRUNC             _PC_NO_TRUNC            3,4
          _POSIX_VDISABLE             _PC_VDISABLE            2
          _POSIX_ASYNC_IO             _PC_ASYNC_IO            8
          _POSIX_PRIO_IO              _PC_PRIO_IO             8
          _POSIX_SYNC_IO              _PC_SYNC_IO             8

   Requirements
        1. If  path  or fildes refers to a directory, the value returned shall
           apply to the directory itself.

        2. If path or fildes  does  not  refer  to  a  terminal  file,  it  is
           unspecified  whether  an  implementation supports an association of
           the variable name with the specified file.

        3. If path or fildes refers to a directory, the value  returned  shall
           apply to filenames within the directory.

        4. If  path or fildes does not refer to a directory, it is unspecified
           whether an implementation supports an association of  the  variable
           name with the specified file.

        5. If  path  or fildes refers to a directory, the value returned shall
           be the maximum length of a relative  pathname  when  the  specified
           directory is the working directory.

        6. If  path  refers to a FIFO, or fildes refers to a pipe or FIFO, the
           value returned shall apply to the referenced  object.  If  path  or
           fildes refers to a directory, the value returned shall apply to any
           FIFO that exists or can be created within the directory. If path or
           fildes  refers to any other type of file, it is unspecified whether
           an implementation supports an association of the variable name with
           the specified file.

        7. If  path  or fildes refers to a directory, the value returned shall
           apply to any files, other than directories, that exist  or  can  be
           created within the directory.

        8. If  path or fildes refers to a directory, it is unspecified whether
           an implementation supports an association of the variable name with
           the specified file.

        9. If  path  or fildes refers to a directory, the value returned shall
           be the maximum length of the string that a symbolic  link  in  that
           directory can contain.

RETURN VALUE

       If  name  is  an  invalid  value, both pathconf() and fpathconf() shall
       return -1 and set errno to indicate the error.

       If the variable corresponding to name has no limit for the path or file
       descriptor,  both  pathconf()  and  fpathconf() shall return -1 without
       changing errno. If the implementation needs to use  path  to  determine
       the  value  of  name  and  the  implementation  does  not  support  the
       association of name with the file specified by path, or if the  process
       did  not  have  appropriate  privileges  to query the file specified by
       path, or path does not exist, pathconf() shall return -1 and set  errno
       to indicate the error.

       If  the  implementation  needs  to use fildes to determine the value of
       name and the implementation does not support the  association  of  name
       with  the  file  specified  by  fildes, or if fildes is an invalid file
       descriptor, fpathconf() shall return -1 and set errno to  indicate  the
       error.

       Otherwise,  pathconf() or fpathconf() shall return the current variable
       value for the file or  directory  without  changing  errno.  The  value
       returned  shall  not  be  more restrictive than the corresponding value
       available  to  the  application  when  it   was   compiled   with   the
       implementation’s <limits.h> or <unistd.h>.

ERRORS

       The pathconf() function shall fail if:

       EINVAL The value of name is not valid.

       ELOOP  A loop exists in symbolic links encountered during resolution of
              the path argument.

       The pathconf() function may fail if:

       EACCES Search permission is denied for a component of the path  prefix.

       EINVAL The  implementation  does  not  support  an  association  of the
              variable name with the specified file.

       ELOOP  More than {SYMLOOP_MAX} symbolic links were  encountered  during
              resolution of the path argument.

       ENAMETOOLONG
              The length of the path argument exceeds {PATH_MAX} or a pathname
              component is longer than {NAME_MAX}.

       ENAMETOOLONG
              As a result of encountering a symbolic link in resolution of the
              path  argument,  the  length  of the substituted pathname string
              exceeded {PATH_MAX}.

       ENOENT A component of path does not name an existing file or path is an
              empty string.

       ENOTDIR
              A component of the path prefix is not a directory.

       The fpathconf() function shall fail if:

       EINVAL The value of name is not valid.

       The fpathconf() function may fail if:

       EBADF  The fildes argument is not a valid file descriptor.

       EINVAL The  implementation  does  not  support  an  association  of the
              variable name with the specified file.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       None.

RATIONALE

       The pathconf() function was proposed immediately  after  the  sysconf()
       function  when it was realized that some configurable values may differ
       across file system, directory, or device boundaries.

       For example, {NAME_MAX} frequently changes between System  V  and  BSD-
       based  file  systems;  System  V  uses a maximum of 14, BSD 255.  On an
       implementation that provides both types of file systems, an application
       would  be  forced to limit all pathname components to 14 bytes, as this
       would be the value specified in <limits.h> on such a system.

       Therefore, various useful values can be queried on any pathname or file
       descriptor, assuming that the appropriate permissions are in place.

       The  value  returned  for the variable {PATH_MAX} indicates the longest
       relative pathname that could be given if the specified directory is the
       process’ current working directory. A process may not always be able to
       generate a name that long and use it if a subdirectory in the  pathname
       crosses into a more restrictive file system.

       The  value  returned  for  the  variable  _POSIX_CHOWN_RESTRICTED  also
       applies to directories that do not have file systems mounted  on  them.
       The  value may change when crossing a mount point, so applications that
       need to know should check for each directory. (An even easier check  is
       to  try the chown() function and look for an error in case it happens.)

       Unlike  the  values  returned  by  sysconf(),   the   pathname-oriented
       variables  are  potentially  more  volatile  and  are not guaranteed to
       remain constant throughout  the  process’  lifetime.  For  example,  in
       between  two  calls to pathconf(), the file system in question may have
       been unmounted and remounted with different characteristics.

       Also note that most of the errors are optional. If one of the variables
       always has the same value on an implementation, the implementation need
       not look at path or fildes to return that value and is, therefore,  not
       required  to  detect  any  of the errors except the meaning of [EINVAL]
       that indicates that the value of name is not valid for that variable.

       If the value of any of the limits is unspecified (logically  infinite),
       they  will  not  be  defined  in  <limits.h>  and  the  pathconf()  and
       fpathconf() functions return -1 without changing  errno.  This  can  be
       distinguished  from  the  case  of giving an unrecognized name argument
       because errno is set to [EINVAL] in this case.

       Since -1 is a valid return value for  the  pathconf()  and  fpathconf()
       functions,  applications  should  set errno to zero before calling them
       and check errno only if the return value is -1.

       For the case of {SYMLINK_MAX}, since both pathconf() and open()  follow
       symbolic  links,  there  is no way that path or fildes could refer to a
       symbolic link.

FUTURE DIRECTIONS

       None.

SEE ALSO

       confstr()   ,   sysconf()   ,   the   Base   Definitions   volume    of
       IEEE Std 1003.1-2001,  <limits.h>,  <unistd.h>, the Shell and Utilities
       volume of IEEE Std 1003.1-2001

COPYRIGHT

       Portions of this text are reprinted and reproduced in  electronic  form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       -- Portable Operating System Interface (POSIX),  The  Open  Group  Base
       Specifications  Issue  6,  Copyright  (C) 2001-2003 by the Institute of
       Electrical and Electronics Engineers, Inc and The Open  Group.  In  the
       event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard
       is  the  referee document. The original Standard can be obtained online
       at http://www.opengroup.org/unix/online.html .