|
» |
|
|
|
NAMEpathconf(), fpathconf() — get configurable path name variables SYNOPSIS#include <unistd.h> long pathconf(const char *path, int name); long fpathconf(int fildes, int name); DESCRIPTIONThe
pathconf()
and
fpathconf()
functions provide a method for applications
to determine the value of a configurable limit or option
associated with a file or directory (see
limits(5)
and
<unistd.h>). For
pathconf(),
the
path
argument points to the path name of a file or directory. For
fpathconf(),
the
fildes
argument is an open file descriptor. For both functions, the
name
argument represents the variable to be queried
regarding the file or directory to which the other argument refers. The following table lists the configuration variables available from
pathconf()
and
fpathconf(),
and lists for each variable the associated value of the
name
argument: The variables in the table are defined as constants in
<limits.h>
or
<unistd.h>
if they do not vary from one path name to another.
The associated values of the
name
argument are defined in
<unistd.h>. RETURN VALUEThe following notes further qualify the table above.
- 1.
If
path
or
fildes
refers to a directory,
the value returned applies to the directory itself. - 2.
If the variable is constant, the value returned is identical to
the variable's definition in
<limits.h>
or
<unistd.h>
regardless of the type of
fildes
or
path.
The behavior is undefined if
path
or
fildes
does not refer to a terminal file. - 3.
If
path
or
fildes
refers to a directory,
the value returned applies to the file names within the directory. - 4.
If
path
or
fildes
does not refer to a directory,
pathconf()
or
fpathconf()
returns -1 and sets
errno
to
EINVAL. - 5.
If
path
or
fildes
refers to a directory, the value returned
is the maximum length of a relative path name
when the specified directory is the working directory. - 6.
If
path
refers to a FIFO, or if
fildes
refers to a pipe or FIFO,
the value returned applies to the pipe or
FIFO itself.
If
path
or
fildes
refers to a directory, the value returned applies to any
FIFOs
that exist or can be created within the directory.
If
PIPE_BUF
is a constant, the value returned is identical to the definition of
PIPE_BUF
in
<limits.h>
regardless of the type of
fildes
or
path.
The behavior is undefined for a file other than a directory,
FIFO, or pipe. - 7.
If
path
or
fildes
refers to a directory,
the value returned applies to files of any type,
other than directories,
that exist or can be created within the directory. - 8.
_POSIX_CHOWN_RESTRICTED
is defined if the privilege group
PRIV_GLOBAL
has been granted the
CHOWN
privilege (see
getprivgrp(2)
and
chown(2)).
In all other cases,
_POSIX_CHOWN_RESTRICTED
is undefined and
pathconf()
or
fpathconf()
returns -1 without changing
errno.
To determine if
chown()
can be performed on a file,
it is simplest to attempt the
chown()
operation and check the return value for failure or success. - 9.
_POSIX_SYNC_IO,
when defined,
determines whether synchronized IO
operations may be performed for the associated file (see
open(2)).
If
path
or
fildes
refers to a directory,
it is unspecified whether or not
the implementation supports an association of the variable name
with the specified file. - 10.
For file systems that are not large file enabled, the
_PC_FILESIZEBITS
return value will be less than or equal to 32. For file systems that
are large file enabled, the
_PC_FILESIZEBITS
return value will be between 33 and 63. - 11.
_POSIX_ASYNC_IO,
when defined, determines whether asynchronous I/O operations may be
performed for the associated file. - 12.
_POSIX_PRIO_IO,
when defined, determines whether prioritized I/O is supported for the
associated file.
If the variable corresponding to
name
is not defined for
path
or
fildes,
the
pathconf()
and
fpathconf()
functions succeed and return a value of -1,
without changing the value of
errno. Upon any other successful completion,
these functions return the value of the named variable
with respect to the specified file or directory, as described above. Otherwise, a value of -1 is returned and
errno
is set to indicate the error. ERRORSThe
pathconf()
and
fpathconf()
fail if any of the following conditions are encountered:
- EACCES
A component of the path prefix denies search permission. - EBADF
The
fildes
argument is not a valid open file descriptor. - EFAULT
path
points outside the allocated address space of the process. - EINVAL
The value of
name
is not valid or the implementation
does not support an association of the variable
name
with the specified file. - ELOOP
Too many symbolic links were encountered in translating
path. - ENAMETOOLONG
The length of the specified path name exceeds
PATH_MAX
bytes, or the length of a component of the path name exceeds
NAME_MAX
bytes while
_POSIX_NO_TRUNC
is in effect. - ENOENT
The file named by
path
does not exist (for example,
path
is null, or a component of
path
does not exist). - ENOTDIR
A component of the path prefix is not a directory.
EXAMPLESThe following example sets
val
to the value of
MAX_CANON
for the device file being used as the standard input.
If the standard input is a terminal,
this value is the maximum number of input characters
that can be entered on a single input line
before typing the newline character:
if (isatty(0))
val = fpathconf(0, _PC_MAX_CANON); The following code segment shows two calls to
pathconf.
The first determines whether a file name longer than
NAME_MAX
bytes will be truncated to
NAME_MAX
bytes in the
/tmp
directory.
If so, the second call is made to determine the actual value of
NAME_MAX
so that an error can be printed if a user-supplied file name stored in
filebuf
will be truncated in this directory:
extern int errno;
char *filebuf;
errno = 0; /* reset errno */
if ( pathconf("/tmp" _PC_NO_TRUNC) == -1 ) {
/* _POSIX_NO_TRUNC is not in effect for this directory */
if (strlen(filebuf) > pathconf("/tmp", PC_NAME_MAX)) {
fprintf(stderr, "Filename %s too long.\n", filebuf);
/* take error action */
}
else
if (errno) {
perror("pathconf");
/* take error action */
}
}
/* otherwise, _POSIX_NO_TRUNC is in effect for this directory */
if ((fd = open(filebuf, O_CREAT, mode)) < 0)
perror(filebuf); DEPENDENCIESNFSThe following error can occur:
- EOPNOTSUPP
path
or
fildes
refers to a file for which a value for
name
cannot be determined.
In particular,
_PC_LINK_MAX,
_PC_NAME_MAX,
_PC_PIPE_BUF,
_PC_PATH_MAX,
_PC_NO_TRUNC,
and
_PC_CHOWN_RESTRICTED,
cannot be determined for an NFS file.
AUTHORpathconf()
and
fpathconf()
were developed by HP. STANDARDS CONFORMANCEpathconf(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, POSIX.2, POSIX.4 fpathconf(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, POSIX.2, POSIX.4
|