版權所有 © 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)
廣告