xref: /freebsd/lib/libsys/pathconf.2 (revision 18a870751b036f1dc78b36084ccb993d139a11bb)
1.\" Copyright (c) 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.Dd August 6, 2025
29.Dt PATHCONF 2
30.Os
31.Sh NAME
32.Nm pathconf ,
33.Nm lpathconf ,
34.Nm fpathconf
35.Nd get configurable pathname variables
36.Sh LIBRARY
37.Lb libc
38.Sh SYNOPSIS
39.In unistd.h
40.Ft long
41.Fn pathconf "const char *path" "int name"
42.Ft long
43.Fn lpathconf "const char *path" "int name"
44.Ft long
45.Fn fpathconf "int fd" "int name"
46.Sh DESCRIPTION
47The
48.Fn pathconf ,
49.Fn lpathconf
50and
51.Fn fpathconf
52system calls provide a method for applications to determine the current
53value of a configurable system limit or option variable associated
54with a pathname or file descriptor.
55.Pp
56For
57.Fn pathconf
58and
59.Fn lpathconf ,
60the
61.Fa path
62argument is the name of a file or directory.
63For
64.Fn fpathconf ,
65the
66.Fa fd
67argument is an open file descriptor.
68The
69.Fa name
70argument specifies the system variable to be queried.
71Symbolic constants for each name value are found in the include file
72.Li <unistd.h> .
73.Pp
74The
75.Fn lpathconf
76system call is like
77.Fn pathconf
78except in the case where the named file is a symbolic link,
79in which case
80.Fn lpathconf
81returns information about the link,
82while
83.Fn pathconf
84returns information about the file the link references.
85.Pp
86The available values are as follows:
87.Bl -tag -width 6n
88.It Li _PC_LINK_MAX
89The maximum file link count.
90.It Li _PC_MAX_CANON
91The maximum number of bytes in terminal canonical input line.
92.It Li _PC_MAX_INPUT
93The minimum maximum number of bytes for which space is available in
94a terminal input queue.
95.It Li _PC_NAME_MAX
96The maximum number of bytes in a file name.
97.It Li _PC_PATH_MAX
98The maximum number of bytes in a pathname.
99.It Li _PC_PIPE_BUF
100The maximum number of bytes which will be written atomically to a pipe.
101.It Li _PC_CHOWN_RESTRICTED
102Return 1 if appropriate privilege is required for the
103.Xr chown 2
104system call, otherwise 0.
105.St -p1003.1-2001
106requires appropriate privilege in all cases, but this behavior was optional
107in prior editions of the standard.
108.It Li _PC_NO_TRUNC
109Return greater than zero if attempts to use pathname components longer than
110.Brq Dv NAME_MAX
111will result in an
112.Bq Er ENAMETOOLONG
113error; otherwise, such components will be truncated to
114.Brq Dv NAME_MAX .
115.St -p1003.1-2001
116requires the error in all cases, but this behavior was optional in prior
117editions of the standard, and some
118.No non- Ns Tn POSIX Ns -compliant
119file systems do not support this behavior.
120.It Li _PC_VDISABLE
121Returns the terminal character disabling value.
122.It Li _PC_ASYNC_IO
123Return 1 if asynchronous I/O is supported, otherwise 0.
124.It Li _PC_PRIO_IO
125Returns 1 if prioritised I/O is supported for this file,
126otherwise 0.
127.It Li _PC_SYNC_IO
128Returns 1 if synchronised I/O is supported for this file, otherwise 0.
129.It Li _PC_ALLOC_SIZE_MIN
130Minimum number of bytes of storage allocated for any portion of a file.
131.It Li _PC_FILESIZEBITS
132Number of bits needed to represent the maximum file size.
133.It Li _PC_REC_INCR_XFER_SIZE
134Recommended increment for file transfer sizes between
135.Dv _PC_REC_MIN_XFER_SIZE
136and
137.Dv _PC_REC_MAX_XFER_SIZE .
138.It Li _PC_REC_MAX_XFER_SIZE
139Maximum recommended file transfer size.
140.It Li _PC_REC_MIN_XFER_SIZE
141Minimum recommended file transfer size.
142.It Li _PC_REC_XFER_ALIGN
143Recommended file transfer buffer alignment.
144.It Li _PC_SYMLINK_MAX
145Maximum number of bytes in a symbolic link.
146.It Li _PC_ACL_EXTENDED
147Returns 1 if an Access Control List (ACL) can be set on the specified
148file, otherwise 0.
149.It Li _PC_ACL_NFS4
150Returns 1 if an NFSv4 ACLs can be set on the specified
151file, otherwise 0.
152.It Li _PC_ACL_PATH_MAX
153Maximum number of ACL entries per file.
154.It Li _PC_CAP_PRESENT
155Returns 1 if a capability state can be set on the specified file,
156otherwise 0.
157.It Li _PC_INF_PRESENT
158Returns 1 if an information label can be set on the specified file,
159otherwise 0.
160.It Li _PC_MAC_PRESENT
161Returns 1 if a Mandatory Access Control (MAC) label can be set on the
162specified file, otherwise 0.
163.It Li _PC_MIN_HOLE_SIZE
164If a file system supports the reporting of holes (see
165.Xr lseek 2 ) ,
166.Fn pathconf
167and
168.Fn fpathconf
169return a positive number that represents the minimum hole size returned in
170bytes.
171The offsets of holes returned will be aligned to this same value.
172A special value of 1 is returned if the file system does not specify the minimum
173hole size but still reports holes.
174.It Li _PC_DEALLOC_PRESENT
175Return 1 if a file system supports hole-punching (see
176.Xr fspacectl 2 ) ,
177otherwise 0.
178.It Li _PC_NAMEDATTR_ENABLED
179Return 1 if named attributes are enabled for the file system, otherwise 0.
180.It Li _PC_HAS_NAMEDATTR
181Return 1 if one or more named attributes exist for the file, otherwise 0.
182.It Li _PC_HAS_HIDDENSYSTEM
183Return 1 if both
184.Dv UF_HIDDEN
185and
186.Dv UF_SYSTEM
187flags can be set by
188.Xr chflags 2 ,
189otherwise 0.
190.It Li _PC_CLONE_BLKSIZE
191Returns the block size required for block cloning via
192.Xr copy_file_range 2
193for a file system if block cloning is supported,
194otherwise 0.
195.El
196.Sh RETURN VALUES
197If the call to
198.Fn pathconf
199or
200.Fn fpathconf
201is not successful, \-1 is returned and
202.Va errno
203is set appropriately.
204Otherwise, if the variable is associated with functionality that does
205not have a limit in the system, \-1 is returned and
206.Va errno
207is not modified.
208Otherwise, the current variable value is returned.
209.Sh ERRORS
210If any of the following conditions occur, the
211.Fn pathconf
212and
213.Fn fpathconf
214system calls shall return -1 and set
215.Va errno
216to the corresponding value.
217.Bl -tag -width Er
218.It Bq Er EINVAL
219The value of the
220.Fa name
221argument is invalid.
222.It Bq Er EINVAL
223The implementation does not support an association of the variable
224name with the associated file.
225.El
226.Pp
227The
228.Fn pathconf
229system call
230will fail if:
231.Bl -tag -width Er
232.It Bq Er ENOTDIR
233A component of the path prefix is not a directory.
234.It Bq Er ENAMETOOLONG
235A component of a pathname exceeded
236.Brq Dv NAME_MAX
237characters (but see
238.Dv _PC_NO_TRUNC
239above),
240or an entire path name exceeded
241.Brq Dv PATH_MAX
242characters.
243.It Bq Er ENOENT
244The named file does not exist.
245.It Bq Er EACCES
246Search permission is denied for a component of the path prefix.
247.It Bq Er ELOOP
248Too many symbolic links were encountered in translating the pathname.
249.It Bq Er EIO
250An I/O error occurred while reading from or writing to the file system.
251.It Bq Er EINTEGRITY
252Corrupted data was detected while reading from the file system.
253.El
254.Pp
255The
256.Fn fpathconf
257system call
258will fail if:
259.Bl -tag -width Er
260.It Bq Er EBADF
261The
262.Fa fd
263argument
264is not a valid open file descriptor.
265.It Bq Er EIO
266An I/O error occurred while reading from or writing to the file system.
267.It Bq Er EINTEGRITY
268Corrupted data was detected while reading from the file system.
269.El
270.Sh SEE ALSO
271.Xr chflags 2 ,
272.Xr copy_file_range 2 ,
273.Xr lseek 2 ,
274.Xr sysctl 3
275.Sh HISTORY
276The
277.Fn pathconf
278and
279.Fn fpathconf
280system calls first appeared in
281.Bx 4.4 .
282The
283.Fn lpathconf
284system call first appeared in
285.Fx 8.0 .
286