symlink, symlinkat - make a symbolic link for a file
原型如下
#include <unistd.h>
int symlink(const char *target, const char *linkpath);
#include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h>
int symlinkat(const char *target, int newdirfd, const char *linkpath);
//Both Return: 0 if OK, -1 on error
linkpath
创建新的目录项(directory entry)指向target
。创建链接符号时,target
不需要一定存在。此外两者也不需要在同一个文件系统中。
The symlinkat
function is similar to symlink
, but the linkpath
argument is evaluated relative to the directory referenced by the open file descriptor for that directory (specified by the newdirfd
argument). If the linkpath
argument specifies an absolute pathname or if the newdirfd
argument has the special value AT_FDCWD
, then symlinkat
behaves the same way as symlink
.
readlink, readlinkat - read value of a symbolic link
因为open
follows a symbolic link,所以我们需要一种方法打开link本身。就是这两种系统调用完成该功能。
#include <unistd.h>
ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
#include <fcntl.h> /* Definition of AT_* constants */
#include <unistd.h>
ssize_t readlinkat(int dirfd, const char *pathname,
char *buf, size_t bufsiz);
这些函数组合了open
、read
andclose
的功能。如果成功,会返回读入buf
的字节数。在buf
中关于symbolic link
的内容不以\0
结尾。
The readlinkat
function behaves the same way as the readlink
function when the pathname argument specifies an absolute pathname or when the dirfd
argument has the special valueAT_FDCWD
. However, when the dirfd
argument is a valid file descriptor of an open directory and the pathname
argument is a relative pathname, then readlinkat
evaluates the pathname relative to the open directory represented by dirfd
.