版权所有 © 2014 tutorialspoint
#include <fcntl.h> int openat(int dirfd, const char *pathname, int flags); int openat(int dirfd, const char *pathname, int flags ", mode_t " mode );
int openat(int dirfd, const char *pathname, int flags); int openat(int dirfd, const char *pathname, int flags ", mode_t " mode );
如果在 pathname 中给出的路径名是相对路径,则它将相对于文件描述符 dirfd 所引用的目录进行解释(而不是相对于调用进程的当前工作目录,open(2) 对相对路径名就是这样做的)。
如果在 pathname 中给出的路径名是相对路径并且 dirfd 是特殊值 AT_FDCWD,则 pathname 将相对于调用进程的当前工作目录进行解释(就像 open(2) 一样)。
如果在 pathname 中给出的路径名是绝对路径,则忽略 dirfd。
首先,openat() 允许应用程序避免使用 open(2) 在当前工作目录以外的目录中打开文件时可能发生的竞争条件。这些竞争条件是由以下事实导致的:在调用 open() 时,给定到 open() 的目录前缀的某些组件可能会与 open() 的调用并行更改。可以通过打开目标目录的文件描述符,然后将该文件描述符指定为 openat() 的 dirfd 参数来避免此类竞争。
其次,openat() 允许通过应用程序维护的文件描述符来实现每个线程的“当前工作目录”。(此功能也可以通过基于使用 /proc/self/fd/dirfd 的技巧来获得,但效率较低。)
faccessat (2)
fchmodat (2)
fchownat (2)
fstatat (2)
futimesat (2)
linkat (2)
mkdirat (2)
mknodat (2)
open (2)
path_resolution (2)
readlinkat (2)
renameat (2)
symlinkat (2)
unlinkat (2)
广告