fpathconf(3p)
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 vari able 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 vari able 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 BSDbased 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 .