xref: /freebsd/lib/libsys/pathconf.2 (revision 7ab1a32cd43cbae61ad4dd435d6a482bbf61cb52)
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, 2021
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.El
179.Sh RETURN VALUES
180If the call to
181.Fn pathconf
182or
183.Fn fpathconf
184is not successful, \-1 is returned and
185.Va errno
186is set appropriately.
187Otherwise, if the variable is associated with functionality that does
188not have a limit in the system, \-1 is returned and
189.Va errno
190is not modified.
191Otherwise, the current variable value is returned.
192.Sh ERRORS
193If any of the following conditions occur, the
194.Fn pathconf
195and
196.Fn fpathconf
197system calls shall return -1 and set
198.Va errno
199to the corresponding value.
200.Bl -tag -width Er
201.It Bq Er EINVAL
202The value of the
203.Fa name
204argument is invalid.
205.It Bq Er EINVAL
206The implementation does not support an association of the variable
207name with the associated file.
208.El
209.Pp
210The
211.Fn pathconf
212system call
213will fail if:
214.Bl -tag -width Er
215.It Bq Er ENOTDIR
216A component of the path prefix is not a directory.
217.It Bq Er ENAMETOOLONG
218A component of a pathname exceeded
219.Brq Dv NAME_MAX
220characters (but see
221.Dv _PC_NO_TRUNC
222above),
223or an entire path name exceeded
224.Brq Dv PATH_MAX
225characters.
226.It Bq Er ENOENT
227The named file does not exist.
228.It Bq Er EACCES
229Search permission is denied for a component of the path prefix.
230.It Bq Er ELOOP
231Too many symbolic links were encountered in translating the pathname.
232.It Bq Er EIO
233An I/O error occurred while reading from or writing to the file system.
234.It Bq Er EINTEGRITY
235Corrupted data was detected while reading from the file system.
236.El
237.Pp
238The
239.Fn fpathconf
240system call
241will fail if:
242.Bl -tag -width Er
243.It Bq Er EBADF
244The
245.Fa fd
246argument
247is not a valid open file descriptor.
248.It Bq Er EIO
249An I/O error occurred while reading from or writing to the file system.
250.It Bq Er EINTEGRITY
251Corrupted data was detected while reading from the file system.
252.El
253.Sh SEE ALSO
254.Xr lseek 2 ,
255.Xr sysctl 3
256.Sh HISTORY
257The
258.Fn pathconf
259and
260.Fn fpathconf
261system calls first appeared in
262.Bx 4.4 .
263The
264.Fn lpathconf
265system call first appeared in
266.Fx 8.0 .
267