#include <unistd.h>
long fpathconf(int fildes, int name);
long pathconf(const char *path, int name);
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 |
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>.
The pathconf() function shall fail if:
The pathconf() function may fail if:
The fpathconf() function shall fail if:
The fpathconf() function may fail if:
The following sections are informative.
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.
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