Manual Page Result
0
Command: symlink | Section: 2 | Source: OpenBSD | File: symlink.2
SYMLINK(2) FreeBSD System Calls Manual SYMLINK(2)
NAME
symlink, symlinkat - make symbolic link to a file
SYNOPSIS
#include <unistd.h>
int
symlink(const char *name1, const char *name2);
#include <fcntl.h>
#include <unistd.h>
int
symlinkat(const char *name1, int fd, const char *name2);
DESCRIPTION
A symbolic link name2 is created to name1 (name2 is the name of the file
created, name1 is the string used in creating the symbolic link). Either
name may be an arbitrary pathname; the files need not be on the same file
system, and the file specified by name1 need not exist at all.
The symlinkat() function is equivalent to symlink() except that where
name2 specifies a relative path, the newly created symbolic link is
created relative to the directory associated with file descriptor fd
instead of the current working directory.
If symlinkat() is passed the special value AT_FDCWD (defined in
<fcntl.h>) in the fd parameter, the current working directory is used and
the behavior is identical to a call to symlink().
RETURN VALUES
Upon successful completion, the value 0 is returned; otherwise the
value -1 is returned and the global variable errno is set to indicate the
error.
ERRORS
The symbolic link will fail if:
[ENOTDIR] A component of the name2 prefix is not a directory.
[ENAMETOOLONG] A component of a pathname exceeded NAME_MAX
characters, or an entire pathname (including the
terminating NUL) exceeded PATH_MAX bytes.
[ENOENT] The named file does not exist.
[EACCES] A component of the name2 path prefix denies search
permission.
[ELOOP] Too many symbolic links were encountered in
translating the pathname.
[EEXIST] name2 already exists.
[EIO] An I/O error occurred while making the directory entry
for name2, or allocating the inode for name2, or
writing out the link contents of name2.
[EROFS] The file name2 would reside on a read-only file
system.
[ENOSPC] The directory in which the entry for the new symbolic
link is being placed cannot be extended because there
is no space left on the file system containing the
directory.
[ENOSPC] The new symbolic link cannot be created because there
is no space left on the file system that will contain
the symbolic link.
[ENOSPC] There are no free inodes on the file system on which
the symbolic link is being created.
[EDQUOT] The directory in which the entry for the new symbolic
link is being placed cannot be extended because the
user's quota of disk blocks on the file system
containing the directory has been exhausted.
[EDQUOT] The new symbolic link cannot be created because the
user's quota of disk blocks on the file system that
will contain the symbolic link has been exhausted.
[EDQUOT] The user's quota of inodes on the file system on which
the symbolic link is being created has been exhausted.
[EIO] An I/O error occurred while making the directory entry
or allocating the inode.
[EFAULT] name1 or name2 points outside the process's allocated
address space.
Additionally, symlinkat() will fail if:
[EBADF] The name2 argument specifies a relative path and the
fd argument is neither AT_FDCWD nor a valid file
descriptor.
[ENOTDIR] The name2 argument specifies a relative path and the
fd argument is a valid file descriptor but it does not
reference a directory.
[EACCES] The name2 argument specifies a relative path but
search permission is denied for the directory which
the fd file descriptor references.
SEE ALSO
ln(1), link(2), readlink(2), unlink(2), symlink(7)
STANDARDS
The symlink() and symlinkat() functions conform to IEEE Std 1003.1-2008
("POSIX.1").
HISTORY
The symlink() system call first appeared in 4.1cBSD. The symlinkat()
system call has been available since OpenBSD 5.0.
FreeBSD 14.1-RELEASE-p8 January 3, 2021 FreeBSD 14.1-RELEASE-p8