遵循规范

symlink():SVr4、4.3BSD,POSIX.1-2001,POSIX.1-2008。

symlinkat():POSIX.1-2008。

语法

#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);

Feature Test Macro Requirements for glibc (see
feature_test_macros(7)):

symlink():

_XOPEN_SOURCE>= 500 || _POSIX_C_SOURCE>= 200112L || / * Glibc版本

symlinkat():

Since glibc 2.10:
_POSIX_C_SOURCE>= 200809L
Before glibc 2.10:
_ATFILE_SOURCE

说明

symlink()创建一个名为linkpath的符号链接,其中包含字符串目标。

在运行时将符号链接解释为好像链接的内容已替换为要查找文件或目录所遵循的路径。

符号链接可能包含..路径组件,该组件(如果在链接的开头使用)是指链接所在目录的父目录。

符号链接(也称为软链接)可能指向现有文件,也可能指向不存在的文件。后一种情况称为悬空链接。

符号链接的权限无关紧要。跟随链接时,所有权将被忽略,但是当请求删除或重命名链接且链接位于具有置位粘性位(S_ISVTX)的目录中时,将检查所有权。

如果存在linkpath,则不会覆盖它。

symlinkat()

除了此处描述的区别之外,symlinkat()系统调用的操作方式与symlink()完全相同。

如果在linkpath中给定的路径名​​是相对的,则它相对于文件描述符newdirfd所引用的目录进行解释(而不是相对于调用进程的当前工作目录,如symlink()对相对路径名所做的那样) 。

如果linkpath是相对的,而newdirfd是特殊值AT_FDCWD,则相对于调用进程的当前工作目录(例如symlink())来解释linkpath。

如果linkpath是绝对的,则将忽略newdirfd。

另外参见

ln(1),namei(1),lchown(2),link(2),lstat(2),open(2),readlink(2),rename(2),unlink(2),path_resolution(7),符号链接(7)

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

名称

symlink,symlinkat-为文件命名

错误说明

EACCES
对包含链接路径的目录的写访问被拒绝,或者链接路径的路径前缀中的目录之一不允许搜索权限。 (另请参见path_resolution(7)。)
EDQUOT
用户在文件系统上的资源配额已用尽。资源可以是inode或磁盘块,具体取决于文件系统的实现。
EEXIST
linkpath已经存在。
EFAULT
目标或链接路径点在您可访问的地址空间之外。
EIO
发生I / O错误。
ELOOP
解决链接路径时遇到太多符号链接。
ENAMETOOLONG
目标或链接路径太长。
ENOENT
linkpath中的目录组件不存在,或者是悬挂的符号链接,或者target或linkpath是空字符串。
ENOMEM
内核内存不足。
ENOSPC
包含文件的设备没有空间容纳新目录条目。
ENOTDIR
实际上,在链接路径中用作目录的组件不是目录。
EPERM
包含链接路径的文件系统不支持符号链接的创建。
EROFS
linkpath位于只读文件系统上。

symlinkat()可能会发生以下附加错误:

EBADF
newdirfd不是有效的文件描述符。
ENOENT
linkpath是一个相对路径名,newdirfd指向一个已删除的目录。
ENOTDIR
linkpath是相对的,newdirfd是引用目录以外的文件的文件描述符。

版本

symlinkat()已在内核2.6.16中添加到Linux;库支持已添加到版本2.4中的glibc。

备注

不检查目标。

删除符号链接引用的名称实际上将删除该文件(除非它也具有其他硬链接)。如果不需要此行为,请使用link(2)。

Glibc notes

在较旧的内核(其中symlinkat()不可用)上,glibc包装器函数会转而使用symlink()。如果linkpath是相对路径名,则glibc将基于/ proc / self / fd中与newdirfd参数相对应的符号链接构造路径名。

SYMLINK - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

日期:2019-08-20 17:59:31 来源:oir作者:oir