The Open Group Base Specifications Issue 6
IEEE Std 1003.1, 2004 Edition
Copyright © 2001-2004 The IEEE and The Open Group, All Rights reserved.
A newer edition of this document exists here


symlink - make a symbolic link to a file


#include <unistd.h>

int symlink(const char *
path1, const char *path2);


The symlink() function shall create a symbolic link called path2 that contains the string pointed to by path1 ( path2 is the name of the symbolic link created, path1 is the string contained in the symbolic link).

The string pointed to by path1 shall be treated only as a character string and shall not be validated as a pathname.

If the symlink() function fails for any reason other than [EIO], any file named by path2 shall be unaffected.


Upon successful completion, symlink() shall return 0; otherwise, it shall return -1 and set errno to indicate the error.


The symlink() function shall fail if:

Write permission is denied in the directory where the symbolic link is being created, or search permission is denied for a component of the path prefix of path2.
The path2 argument names an existing file or symbolic link.
An I/O error occurs while reading from or writing to the file system.
A loop exists in symbolic links encountered during resolution of the path2 argument.
The length of the path2 argument exceeds {PATH_MAX} or a pathname component is longer than {NAME_MAX} or the length of the path1 argument is longer than {SYMLINK_MAX}.
A component of path2 does not name an existing file or path2 is an empty string.
The directory in which the entry for the new symbolic link is being placed cannot be extended because no space is left on the file system containing the directory, or the new symbolic link cannot be created because no space is left on the file system which shall contain the link, or the file system is out of file-allocation resources.
A component of the path prefix of path2 is not a directory.
The new symbolic link would reside on a read-only file system.

The symlink() function may fail if:

More than {SYMLOOP_MAX} symbolic links were encountered during resolution of the path2 argument.
As a result of encountering a symbolic link in resolution of the path2 argument, the length of the substituted pathname string exceeded {PATH_MAX} bytes (including the terminating null byte), or the length of the string pointed to by path1 exceeded {SYMLINK_MAX}.

The following sections are informative.




Like a hard link, a symbolic link allows a file to have multiple logical names. The presence of a hard link guarantees the existence of a file, even after the original name has been removed. A symbolic link provides no such assurance; in fact, the file named by the path1 argument need not exist when the link is created. A symbolic link can cross file system boundaries.

Normal permission checks are made on each component of the symbolic link pathname during its resolution.


Since IEEE Std 1003.1-2001 does not require any association of file times with symbolic links, there is no requirement that file times be updated by symlink().




lchown(), link(), lstat(), open(), readlink(), unlink(), the Base Definitions volume of IEEE Std 1003.1-2001, <unistd.h>


First released in Issue 4, Version 2.

Issue 5

Moved from X/OPEN UNIX extension to BASE.

Issue 6

The following changes were made to align with the IEEE P1003.1a draft standard:

End of informative text.

UNIX ® is a registered Trademark of The Open Group.
POSIX ® is a registered Trademark of The IEEE.
[ Main Index | XBD | XCU | XSH | XRAT ]