FPATHCONF - Linux手册页

时间:2019-08-20 18:00:58  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-07-13

名称

fpathconf,pathconf-获取文件的配置值

语法

#include <unistd.h>

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

说明

fpathconf()获取打开文件描述符fd的配置选项名称的值。

pathconf()获取文件名路径的配置选项名称的值。

中定义的相应宏为最小值;如果应用程序希望利用可能更改的值,则可以调用fpathconf()或pathconf(),这可能会产生更自由的结果。

将名称设置为等于以下常量之一将返回以下配置选项:

_PC_LINK_MAX
文件的最大链接数。如果fd或path引用目录,则该值适用于整个目录。相应的宏是_POSIX_LINK_MAX。
_PC_MAX_CANON
格式化输入线的最大长度,其中fd或path必须指向终端。相应的宏是_POSIX_MAX_CANON。
_PC_MAX_INPUT
输入线的最大长度,其中fd或path必须指向终端。相应的宏是_POSIX_MAX_INPUT。
_PC_NAME_MAX
允许进程创建的目录路径或fd中文件名的最大长度。相应的宏是_POSIX_NAME_MAX。
_PC_PATH_MAX
当path或fd是当前工作目录时,相对路径名的最大长度。相应的宏是_POSIX_PATH_MAX。
_PC_PIPE_BUF
可以原子方式写入FIFO管道的最大字节数。对于fpathconf(),fd应该引用管道或FIFO。对于fpathconf(),路径应引用FIFO或目录。在后一种情况下,返回值对应于在该目录中创建的FIFO。相应的宏是_POSIX_PIPE_BUF。
_PC_CHOWN_RESTRICTED
如果将chown(2)和fchown(2)用于更改文件的用户ID的操作仅限于具有适当特权的进程,并且将文件的组ID更改为该进程的有效组ID之外的值,则此方法将返回正值。其补充组ID之一仅限于具有适当特权的进程。根据POSIX.1,此变量必须始终用-1以外的值定义。相应的宏是_POSIX_CHOWN_RESTRICTED。
如果fd或path指向目录,则返回值适用于该目录中的所有文件。
_PC_NO_TRUNC
如果访问长于_POSIX_NAME_MAX的文件名会产生错误,则返回非零值。相应的宏是_POSIX_NO_TRUNC。
_PC_VDISABLE
如果可以禁用特殊字符处理,则返回非零值,其中fd或path必须引用终端。

返回值

这些函数的返回值为以下之一:

*
发生错误时,将返回-1并将errno设置为指示错误的原因(例如,EINVAL,指示名称无效)。
*
如果名称对应于最大或最小限制,并且该限制不确定,则返回-1且errno不变。 (要区分不确定的限制和错误,请在调用之前将errno设置为零,然后在返回-1时检查errno是否为非零。)
*
如果name对应于一个选项,则如果支持该选项,则返回正值;如果不支持该选项,则返回-1。
*
否则,将返回期权或限制的当前值。此值的限制不会比在编译应用程序时或在编译应用程序时为应用程序描述的相应值更严格。

错误说明

EACCES
(pathconf())拒绝对path的路径前缀中的目录之一进行搜索。
EBADF
(fpathconf())fd不是有效的文件描述符。
EINVAL
名称无效。
EINVAL
该实现不支持名称与指定文件的关联。
ELOOP
(pathconf())解析路径时遇到太多符号链接。
ENAMETOOLONG
(pathconf())路径太长。
ENOENT
(pathconf())路径的组件不存在,或者路径是一个空字符串。
ENOTDIR
(pathconf())在path中用作目录的组件实际上不是目录。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
fpathconf(),pathconf()Thread safetyMT-Safe

遵循规范

POSIX.1-2001,POSIX.1-2008。

备注

名称长度大于名称等于_PC_NAME_MAX的返回值的文件可能存在于给定目录中。

一些返回的值可能很大;它们不适合分配内存。

另外参见

getconf(1),open(2),statfs(2),confstr(3),sysconf(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/