Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > P

pathconf(2)

HP-UX 11i Version 3: February 2007
» 

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index

NAME

pathconf(), fpathconf() — get configurable path name variables

SYNOPSIS

#include <unistd.h>

long pathconf(const char *path, int name);

long fpathconf(int fildes, int name);

DESCRIPTION

The 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:

VariableValue of nameNotes
LINK_MAX_PC_LINK_MAX1
MAX_CANON_PC_MAX_CANON2
MAX_INPUT_PC_MAX_INPUT2
_PC_FILESIZEBITS3, 4, 10
NAME_MAX_PC_NAME_MAX3, 4
PATH_MAX_PC_PATH_MAX4, 5
PIPE_BUF_PC_PIPE_BUF6
_POSIX_ASYNC_IO_PC_ASYNC_IO1, 11
_POSIX_CHOWN_RESTRICTED_PC_CHOWN_RESTRICTED7, 8
_POSIX_NO_TRUNC_PC_NO_TRUNC3, 4
_POSIX_PRIO_IO_PC_PRIO_IO1, 12
_POSIX_SYNC_IO_PC_SYNC_IO9
_POSIX_VDISABLE_PC_V_DISABLE2

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 VALUE

The 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.

ERRORS

The 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.

EXAMPLES

The 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);

DEPENDENCIES

NFS

The 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.

AUTHOR

pathconf() and fpathconf() were developed by HP.

STANDARDS CONFORMANCE

pathconf(): 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

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.