#include <fcntl.h> /* AT_* 定数の定義 */ #include <unistd.h> int linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
linkat():
glibc 2.10 以降: _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
glibc 2.10 より前:
_ATFILE_SOURCE
oldpath で指定されるパス名が相対パス名である場合、 ファイルディスクリプタ olddirfd で参照されるディレクトリからの相対パス名として解釈される (link(2) では、相対パスは呼び出し元プロセスの カレントワーキングディレクトリからの相対パスとなる)。
oldpath が相対パスであり、かつ olddirfd が特別な値 AT_FDCWD である場合、 oldpath は (link(2) と同じように) 呼び出し元プロセスの カレントワーキングディレクトリからの相対パス名として解釈される。
oldpath が絶対パスである場合、 olddirfd は無視される。
newpath の解釈は oldpath と同様であるが、 相対パス名はファイルディスクリプタ newdirfd で参照されるディレクトリからの相対パス名として解釈される。
デフォルトでは、 oldpath がシンボリック・リンクの場合、 (link(2) 同様) linkat() は oldpath の参照の解決を行わない。 Linux 2.6.18 以降では、 AT_SYMLINK_FOLLOW フラグを flags に指定することができる。このフラグを指定すると、 oldpath がシンボリック・リンクの場合、 oldpath の参照の解決を行う。 2.6.18 以前のカーネルでは、 flags 引き数は使用されず、 0 を指定しなければならなかった。