API
#include <fcntl.h>
int openat(int dirfd, const char*pathname, int flags, ...);
//Returns 0 on success and -1 on error.
Description
openat()
系统调用类似于open()
,不同点主要由于dirfd
参数。
dirfd
和pathname
要联合使用:
- 如果
pathname
是绝对路径,那么dirfd
就被忽略。 - 如果
pathname
是相对路径,并且dirfd
为特殊值AT_FDCWD
,那么pathname
就被解释为相对于调用进程当前所在目录。 - 如果
pathname
是相对路径,那么pathanme
就表示相对于dirfd
所指的目录。这种情况下,dirfd
必须是一个打开的、可读的(O_RDONLY
)目录,或者使用了O_PATH
标志位。
如果pathname
是相对路径,并且dirfd
不是一个合法的描述符,会导致错误EBADF
。