symlink(2) - Linux 手册页

名称

symlink - 为文件创建新的名称

概要

#include <unistd.h>

int symlink(const char *oldpath, const char *newpath);

glibc 的功能测试宏要求(参见 feature_test_macros(7))

symlink():
_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE >= 200112L

描述

symlink() 创建一个名为 newpath 的符号链接,该链接包含字符串 oldpath

符号链接在运行时被解释为,如果链接的内容被替换到正在遵循的路径中以查找文件或目录,则会发生的情况。

符号链接可能包含 .. 路径组件,如果这些组件出现在链接的开头,则它们将引用链接所在目录的父目录。

符号链接(也称为软链接)可以指向现有文件,也可以指向不存在的文件;后者称为悬挂链接。

符号链接的权限是无关紧要的;所有权在跟随链接时会被忽略,但在请求删除或重命名链接时会被检查,并且链接位于带有粘滞位 (S_ISVTX) 设置的目录中时也会被检查。

如果 newpath 存在,它将不会被覆盖。

返回值

成功时返回零。出错时返回 -1,并相应地设置 errno

错误

EACCES

拒绝访问包含 newpath 的目录的写入权限,或者 newpath 的路径前缀中的某个目录不允许搜索权限。(另请参阅 path_resolution(7)。)

EDQUOT

用户在文件系统上的资源配额已用尽。这些资源可能是 inode 或磁盘块,具体取决于文件系统实现。

EEXIST

newpath 已经存在。

EFAULT

oldpathnewpath 指向您可访问地址空间之外的位置。

EIO

发生了 I/O 错误。

ELOOP

在解析 newpath 时遇到了过多的符号链接。

ENAMETOOLONG
oldpathnewpath 太长。
ENOENT

newpath 中的一个目录组件不存在或是一个悬挂的符号链接,或者 oldpath 是一个空字符串。

ENOMEM

内核内存不足。

ENOSPC

包含该文件的设备没有足够的空间来创建新的目录条目。

ENOTDIR
用作 newpath 中目录的组件实际上不是一个目录。
EPERM

包含 newpath 的文件系统不支持创建符号链接。

EROFS

newpath 位于只读文件系统上。

符合

SVr4, 4.3BSD, POSIX.1-2001。

说明

不对 oldpath 进行检查。

删除由 symlink 引用的名称实际上会删除该文件(除非它还有其他硬链接)。如果不需要这种行为,请使用 link(2)。

参见

ln(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), symlinkat(2), unlink(2), path_resolution(7), symlink(7)

引用自

explain(1), explain(3), explain_lca2010(1), explain_symlink(3), explain_symlink_or_die(3), nfslogsum(8), symlinks(8), tar_extract_regfile(3)