---
name: "pathconf"
section: "2"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/pathconf"
---

# pathconf(2)

get configurable pathname variables

## 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 **pathconf**() and **fpathconf**() functions provides a method for applications to determine the current value of a configurable system limit or option variable associated with a pathname or file descriptor.

For **pathconf**, the *path* argument is the name of a file or directory. For **fpathconf**, the *fildes* argument is an open file descriptor. The *name* argument specifies the system variable to be queried. Symbolic constants for each name value are found in the include file \<unistd.h\>.

The available values are as follows:

- \_PC\_LINK\_MAX

  The maximum file link count.

- \_PC\_MAX\_CANON

  The maximum number of bytes in terminal canonical input line.

- \_PC\_MAX\_INPUT

  The minimum maximum number of bytes for which space is available in a terminal input queue.

- \_PC\_NAME\_MAX

  The maximum number of bytes in a file name.

- \_PC\_PATH\_MAX

  The maximum number of bytes in a pathname.

- \_PC\_PIPE\_BUF

  The maximum number of bytes which will be written atomically to a pipe.

- \_PC\_CHOWN\_RESTRICTED

  Return 1 if appropriate privileges are required for the [chown(2)](/chown/2.md) system call, otherwise 0.

- \_PC\_NO\_TRUNC

  Return 1 if file names longer than KERN\_NAME\_MAX are truncated.

- \_PC\_VDISABLE

  Returns the terminal character disabling value.

- \_PC\_FILESIZEBITS

  The minimum number of bits needed to represent, as a signed integer value, the maximum size of a regular file allowed in the specified directory. The max file size is 2^(\_PC\_FILESIZEBITS - 1).

- \_PC\_XATTR\_SIZE\_BITS

  Returns the number of bits used to store maximum extended  attribute size in bytes.  For example, if the maximum  attribute size supported by a file system is 128K, the  value returned will be 18.  However a value 18 can mean  that the maximum attribute size can be anywhere from  (256KB - 1) to 128KB.  As a special case, the resource  fork can have much larger size, and some file system  specific extended attributes can have smaller and preset  size; for example, Finder Info is always 32 bytes.

- \_PC\_MIN\_HOLE\_SIZE

  If a file system supports the reporting of holes (see [lseek(2)](/lseek/2.md)), **pathconf**() and **fpathconf**() return a positive number that represents the minimum hole size returned in bytes. The offsets of holes returned will be aligned to this same value. A special value of 1 is returned if the file system does not specify the minimum hole size but still reports holes.

## RETURN VALUES

If the call to **pathconf** or **fpathconf** is not successful, -1 is returned and *errno* is set appropriately. Otherwise, if the variable is associated with functionality that does not have a limit in the system, -1 is returned and *errno* is not modified. Otherwise, the current variable value is returned.

## ERRORS

If any of the following conditions occur, the **pathconf** and **fpathconf** functions shall return -1 and set *errno* to the corresponding value.

- \[EINVAL\]

  The value of the *name* argument is invalid.

- \[EINVAL\]

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

**pathconf**() will fail if:

- \[EACCES\]

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

- \[EIO\]

  An I/O error occurs while reading from or writing to the file system.

- \[ELOOP\]

  Too many symbolic links are encountered in translating the pathname. This is taken to be indicative of a looping symbolic link.

- \[ENAMETOOLONG\]

  A component of a pathname exceeded 255 characters, or an entire path name exceeded 1023 characters.

- \[ENOENT\]

  The named file does not exist.

- \[ENOTDIR\]

  A component of the path prefix is not a directory.

- \[EBADF\]

  *fildes* is not a valid open file descriptor.

- \[EIO\]

  An I/O error occurs while reading from or writing to the file system.

**fpathconf**() will fail if:

## SEE ALSO

[sysctl(3)](/sysctl/3.md)

## HISTORY

The **pathconf** and **fpathconf** functions first appeared in 4.4BSD.
