summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3p/link.3p
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3p/link.3p')
-rw-r--r--upstream/archlinux/man3p/link.3p470
1 files changed, 470 insertions, 0 deletions
diff --git a/upstream/archlinux/man3p/link.3p b/upstream/archlinux/man3p/link.3p
new file mode 100644
index 00000000..846a6fca
--- /dev/null
+++ b/upstream/archlinux/man3p/link.3p
@@ -0,0 +1,470 @@
+'\" et
+.TH LINK "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+link, linkat
+\(em link one file to another file
+.SH SYNOPSIS
+.LP
+.nf
+#include <unistd.h>
+.P
+int link(const char *\fIpath1\fP, const char *\fIpath2\fP);
+.P
+#include <fcntl.h>
+.P
+int linkat(int \fIfd1\fP, const char *\fIpath1\fP, int \fIfd2\fP,
+ const char *\fIpath2\fP, int \fIflag\fP);
+.fi
+.SH DESCRIPTION
+The
+\fIlink\fR()
+function shall create a new link (directory entry) for the existing file,
+.IR path1 .
+.P
+The
+.IR path1
+argument points to a pathname naming an existing file. The
+.IR path2
+argument points to a pathname naming the new directory entry to be
+created. The
+\fIlink\fR()
+function shall atomically create a new link for the existing file and
+the link count of the file shall be incremented by one.
+.P
+If
+.IR path1
+names a directory,
+\fIlink\fR()
+shall fail unless the process has appropriate privileges and the
+implementation supports using
+\fIlink\fR()
+on directories.
+.P
+If
+.IR path1
+names a symbolic link, it is implementation-defined whether
+\fIlink\fR()
+follows the symbolic link, or creates a new link to the symbolic
+link itself.
+.P
+Upon successful completion,
+\fIlink\fR()
+shall mark for update the last file status change timestamp of the
+file. Also, the last data modification and last file status change
+timestamps of the directory that contains the new entry shall be marked
+for update.
+.P
+If
+\fIlink\fR()
+fails, no link shall be created and the link count of the file shall
+remain unchanged.
+.P
+The implementation may require that the calling process has permission
+to access the existing file.
+.P
+The
+\fIlinkat\fR()
+function shall be equivalent to the
+\fIlink\fR()
+function except that symbolic links shall be handled as specified by
+the value of
+.IR flag
+(see below) and except in the case where either
+.IR path1
+or
+.IR path2
+or both are relative paths. In this case a relative path
+.IR path1
+is interpreted relative to the directory associated with the file
+descriptor
+.IR fd1
+instead of the current working directory and similarly for
+.IR path2
+and the file descriptor
+.IR fd2 .
+If the access mode of the open file description associated with the
+file descriptor is not O_SEARCH, the function shall check whether
+directory searches are permitted using the current permissions of
+the directory underlying the file descriptor. If the access mode is
+O_SEARCH, the function shall not perform the check.
+.P
+Values for
+.IR flag
+are constructed by a bitwise-inclusive OR of flags from the following
+list, defined in
+.IR <fcntl.h> :
+.IP AT_SYMLINK_FOLLOW 6
+.br
+If
+.IR path1
+names a symbolic link, a new link for the target of the symbolic link
+is created.
+.P
+If
+\fIlinkat\fR()
+is passed the special value AT_FDCWD in the
+.IR fd1
+or
+.IR fd2
+parameter, the current working directory shall be used for the respective
+.IR path
+argument. If both
+.IR fd1
+and
+.IR fd2
+have value AT_FDCWD, the behavior shall be identical to a call to
+\fIlink\fR(),
+except that symbolic links shall be handled as specified by the value of
+.IR flag .
+.P
+If the AT_SYMLINK_FOLLOW flag is clear in the
+.IR flag
+argument and the
+.IR path1
+argument names a symbolic link, a new link is created for the symbolic
+link
+.IR path1
+and not its target.
+.SH "RETURN VALUE"
+Upon successful completion, these functions shall return 0. Otherwise,
+these functions shall return \-1 and set
+.IR errno
+to indicate the error.
+.br
+.SH ERRORS
+These functions shall fail if:
+.TP
+.BR EACCES
+A component of either path prefix denies search permission, or the
+requested link requires writing in a directory that denies write
+permission, or the calling process does not have permission to access
+the existing file and this is required by the implementation.
+.TP
+.BR EEXIST
+The
+.IR path2
+argument resolves to an existing directory entry or refers to a symbolic
+link.
+.TP
+.BR ELOOP
+A loop exists in symbolic links encountered during resolution of the
+.IR path1
+or
+.IR path2
+argument.
+.TP
+.BR EMLINK
+The number of links to the file named by
+.IR path1
+would exceed
+{LINK_MAX}.
+.TP
+.BR ENAMETOOLONG
+.br
+The length of a component of a pathname is longer than
+{NAME_MAX}.
+.TP
+.BR ENOENT
+A component of either path prefix does not exist; the file named by
+.IR path1
+does not exist; or
+.IR path1
+or
+.IR path2
+points to an empty string.
+.TP
+.BR ENOENT " or " ENOTDIR
+.br
+The
+.IR path1
+argument names an existing non-directory file, and the
+.IR path2
+argument contains at least one non-\c
+<slash>
+character and ends with one or more trailing
+<slash>
+characters. If
+.IR path2
+without the trailing
+<slash>
+characters would name an existing file, an
+.BR [ENOENT]
+error shall not occur.
+.TP
+.BR ENOSPC
+The directory to contain the link cannot be extended.
+.TP
+.BR ENOTDIR
+A component of either path prefix names an existing file that is neither
+a directory nor a symbolic link to a directory, or the
+.IR path1
+argument contains at least one non-\c
+<slash>
+character and ends with one or more trailing
+<slash>
+characters and the last pathname component names an existing file
+that is neither a directory nor a symbolic link to a directory, or the
+.IR path1
+argument names an existing non-directory file and the
+.IR path2
+argument names a nonexistent file, contains at least one non-\c
+<slash>
+character, and ends with one or more trailing
+<slash>
+characters.
+.TP
+.BR EPERM
+The file named by
+.IR path1
+is a directory and either the calling process does not have appropriate
+privileges or the implementation prohibits using
+\fIlink\fR()
+on directories.
+.TP
+.BR EROFS
+The requested link requires writing in a directory on a read-only file
+system.
+.TP
+.BR EXDEV
+The link named by
+.IR path2
+and the file named by
+.IR path1
+are on different file systems and the implementation does not support
+links between file systems.
+.TP
+.BR EXDEV
+.IR path1
+refers to a named STREAM.
+.P
+The
+\fIlinkat\fR()
+function shall fail if:
+.TP
+.BR EACCES
+The access mode of the open file description associated with
+.IR fd1
+or
+.IR fd2
+is not O_SEARCH and the permissions of the directory underlying
+.IR fd1
+or
+.IR fd2 ,
+respectively, do not permit directory searches.
+.TP
+.BR EBADF
+The
+.IR path1
+or
+.IR path2
+argument does not specify an absolute path and the
+.IR fd1
+or
+.IR fd2
+argument, respectively, is neither AT_FDCWD nor a valid file descriptor
+open for reading or searching.
+.TP
+.BR ENOTDIR
+The
+.IR path1
+or
+.IR path2
+argument is not an absolute path and
+.IR fd1
+or
+.IR fd2 ,
+respectively, is a file descriptor associated with a non-directory file.
+.P
+These functions may fail if:
+.TP
+.BR ELOOP
+More than
+{SYMLOOP_MAX}
+symbolic links were encountered during resolution of the
+.IR path1
+or
+.IR path2
+argument.
+.TP
+.BR ENAMETOOLONG
+.br
+The length of a pathname exceeds
+{PATH_MAX},
+or pathname resolution of a symbolic link produced an intermediate
+result with a length that exceeds
+{PATH_MAX}.
+.br
+.P
+The
+\fIlinkat\fR()
+function may fail if:
+.TP
+.BR EINVAL
+The value of the
+.IR flag
+argument is not valid.
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+.SS "Creating a Link to a File"
+.P
+The following example shows how to create a link to a file named
+.BR /home/cnd/mod1
+by creating a new directory entry named
+.BR /modules/pass1 .
+.sp
+.RS 4
+.nf
+
+#include <unistd.h>
+.P
+char *path1 = "/home/cnd/mod1";
+char *path2 = "/modules/pass1";
+int status;
+\&...
+status = link (path1, path2);
+.fi
+.P
+.RE
+.SS "Creating a Link to a File Within a Program"
+.P
+In the following program example, the
+\fIlink\fR()
+function links the
+.BR /etc/passwd
+file (defined as
+.BR PASSWDFILE )
+to a file named
+.BR /etc/opasswd
+(defined as
+.BR SAVEFILE ),
+which is used to save the current password file. Then, after removing
+the current password file (defined as
+.BR PASSWDFILE ),
+the new password file is saved as the current password file using the
+\fIlink\fR()
+function again.
+.sp
+.RS 4
+.nf
+
+#include <unistd.h>
+.P
+#define LOCKFILE "/etc/ptmp"
+#define PASSWDFILE "/etc/passwd"
+#define SAVEFILE "/etc/opasswd"
+\&...
+/* Save current password file */
+link (PASSWDFILE, SAVEFILE);
+.P
+/* Remove current password file. */
+unlink (PASSWDFILE);
+.P
+/* Save new password file as current password file. */
+link (LOCKFILE,PASSWDFILE);
+.fi
+.P
+.RE
+.SH "APPLICATION USAGE"
+Some implementations do allow links between file systems.
+.P
+If
+.IR path1
+refers to a symbolic link, application developers should use
+\fIlinkat\fR()
+with appropriate flags to select whether or not the symbolic link should
+be resolved.
+.SH RATIONALE
+Linking to a directory is restricted to the superuser
+in most historical implementations because this capability may produce
+loops in the file hierarchy or otherwise corrupt the file system. This volume of POSIX.1\(hy2017
+continues that philosophy by prohibiting
+\fIlink\fR()
+and
+\fIunlink\fR()
+from doing this. Other functions could do it if the implementor designed
+such an extension.
+.P
+Some historical implementations allow linking of files on different file
+systems. Wording was added to explicitly allow this optional behavior.
+.P
+The exception for cross-file system links is intended to apply only to
+links that are programmatically indistinguishable from ``hard'' links.
+.P
+The purpose of the
+\fIlinkat\fR()
+function is to link files in directories other than the current working
+directory without exposure to race conditions. Any part of the path of
+a file could be changed in parallel to a call to
+\fIlink\fR(),
+resulting in unspecified behavior. By opening a file descriptor for the
+directory of both the existing file and the target location and using the
+\fIlinkat\fR()
+function it can be guaranteed that the both filenames are in the desired
+directories.
+.P
+The AT_SYMLINK_FOLLOW flag allows for implementing both common behaviors
+of the
+\fIlink\fR()
+function. The POSIX specification requires that if
+.IR path1
+is a symbolic link, a new link for the target of the symbolic link is
+created. Many systems by default or as an alternative provide a mechanism
+to avoid the implicit symbolic link lookup and create a new link for
+the symbolic link itself.
+.P
+Earlier versions of this standard specified only the
+\fIlink\fR()
+function, and required it to behave like
+\fIlinkat\fR()
+with the AT_SYMLINK_FOLLOW flag. However, historical practice from SVR4
+and Linux kernels had
+\fIlink\fR()
+behaving like
+\fIlinkat\fR()
+with no flags, and many systems that attempted to provide a conforming
+\fIlink\fR()
+function did so in a way that was rarely used, and when it was used
+did not conform to the standard (e.g., by not being atomic, or by
+dereferencing the symbolic link incorrectly). Since applications could
+not rely on
+\fIlink\fR()
+following links in practice, the
+\fIlinkat\fR()
+function was added taking a flag to specify the desired behavior
+for the application.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIrename\fR\^(\|)",
+.IR "\fIsymlink\fR\^(\|)",
+.IR "\fIunlink\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "\fB<fcntl.h>\fP",
+.IR "\fB<unistd.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+In the event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .