aboutsummaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2003/man3p/link.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2003/man3p/link.3p')
-rw-r--r--man-pages-posix-2003/man3p/link.3p207
1 files changed, 207 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man3p/link.3p b/man-pages-posix-2003/man3p/link.3p
new file mode 100644
index 0000000..360dd17
--- /dev/null
+++ b/man-pages-posix-2003/man3p/link.3p
@@ -0,0 +1,207 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "LINK" 3P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" link
+.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 \- link to a file
+.SH SYNOPSIS
+.LP
+\fB#include <unistd.h>
+.br
+.sp
+int link(const char *\fP\fIpath1\fP\fB, const char *\fP\fIpath2\fP\fB);
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The \fIlink\fP() function shall create a new link (directory entry)
+for the existing file, \fIpath1\fP.
+.LP
+The \fIpath1\fP argument points to a pathname naming an existing file.
+The \fIpath2\fP argument points to a pathname naming
+the new directory entry to be created. The \fIlink\fP() function shall
+atomically create a new link for the existing file and the
+link count of the file shall be incremented by one.
+.LP
+If \fIpath1\fP names a directory, \fIlink\fP() shall fail unless the
+process has appropriate privileges and the implementation
+supports using \fIlink\fP() on directories.
+.LP
+Upon successful completion, \fIlink\fP() shall mark for update the
+\fIst_ctime\fP field of the file. Also, the \fIst_ctime\fP
+and \fIst_mtime\fP fields of the directory that contains the new entry
+shall be marked for update.
+.LP
+If \fIlink\fP() fails, no link shall be created and the link count
+of the file shall remain unchanged.
+.LP
+The implementation may require that the calling process has permission
+to access the existing file.
+.SH RETURN VALUE
+.LP
+Upon successful completion, 0 shall be returned. Otherwise, -1 shall
+be returned and \fIerrno\fP set to indicate the error.
+.SH ERRORS
+.LP
+The \fIlink\fP() function shall fail if:
+.TP 7
+.B 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 7
+.B EEXIST
+The \fIpath2\fP argument resolves to an existing file or refers to
+a symbolic link.
+.TP 7
+.B ELOOP
+A loop exists in symbolic links encountered during resolution of the
+\fIpath1\fP or \fIpath2\fP argument.
+.TP 7
+.B EMLINK
+The number of links to the file named by \fIpath1\fP would exceed
+{LINK_MAX}.
+.TP 7
+.B ENAMETOOLONG
+The length of the \fIpath1\fP or \fIpath2\fP argument exceeds {PATH_MAX}
+or a pathname component is longer than {NAME_MAX}.
+.TP 7
+.B ENOENT
+A component of either path prefix does not exist; the file named by
+\fIpath1\fP does not exist; or \fIpath1\fP or
+\fIpath2\fP points to an empty string.
+.TP 7
+.B ENOSPC
+The directory to contain the link cannot be extended.
+.TP 7
+.B ENOTDIR
+A component of either path prefix is not a directory.
+.TP 7
+.B EPERM
+The file named by \fIpath1\fP is a directory and either the calling
+process does not have appropriate privileges or the
+implementation prohibits using \fIlink\fP() on directories.
+.TP 7
+.B EROFS
+The requested link requires writing in a directory on a read-only
+file system.
+.TP 7
+.B EXDEV
+The link named by \fIpath2\fP and the file named by \fIpath1\fP are
+on different file systems and the implementation does not
+support links between file systems.
+.TP 7
+.B EXDEV
+\fIpath1\fP refers to a named STREAM.
+.sp
+.LP
+The \fIlink\fP() function may fail if:
+.TP 7
+.B ELOOP
+More than {SYMLOOP_MAX} symbolic links were encountered during resolution
+of the \fIpath1\fP or \fIpath2\fP argument.
+.TP 7
+.B ENAMETOOLONG
+As a result of encountering a symbolic link in resolution of the \fIpath1\fP
+or \fIpath2\fP argument, the length of the
+substituted pathname string exceeded {PATH_MAX}.
+.sp
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.SS Creating a Link to a File
+.LP
+The following example shows how to create a link to a file named \fB/home/cnd/mod1\fP
+by creating a new directory entry named
+\fB/modules/pass1\fP.
+.sp
+.RS
+.nf
+
+\fB#include <unistd.h>
+.sp
+
+char *path1 = "/home/cnd/mod1";
+char *path2 = "/modules/pass1";
+int status;
+\&...
+status = link (path1, path2);
+\fP
+.fi
+.RE
+.SS Creating a Link to a File Within a Program
+.LP
+In the following program example, the \fIlink\fP() function links
+the \fB/etc/passwd\fP file (defined as \fBPASSWDFILE\fP) to
+a file named \fB/etc/opasswd\fP (defined as \fBSAVEFILE\fP), which
+is used to save the current password file. Then, after
+removing the current password file (defined as \fBPASSWDFILE\fP),
+the new password file is saved as the current password file
+using the \fIlink\fP() function again.
+.sp
+.RS
+.nf
+
+\fB#include <unistd.h>
+.sp
+
+#define LOCKFILE "/etc/ptmp"
+#define PASSWDFILE "/etc/passwd"
+#define SAVEFILE "/etc/opasswd"
+\&...
+/* Save current password file */
+link (PASSWDFILE, SAVEFILE);
+.sp
+
+/* Remove current password file. */
+unlink (PASSWDFILE);
+.sp
+
+/* Save new password file as current password file. */
+link (LOCKFILE,PASSWDFILE);
+\fP
+.fi
+.RE
+.SH APPLICATION USAGE
+.LP
+Some implementations do allow links between file systems.
+.SH RATIONALE
+.LP
+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 IEEE\ Std\ 1003.1-2001 continues that
+philosophy by prohibiting \fIlink\fP() and \fIunlink\fP() from doing
+this. Other functions
+could do it if the implementor designed such an extension.
+.LP
+Some historical implementations allow linking of files on different
+file systems. Wording was added to explicitly allow this
+optional behavior.
+.LP
+The exception for cross-file system links is intended to apply only
+to links that are programmatically indistinguishable from
+"hard" links.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIsymlink\fP(), \fIunlink\fP(), the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, \fI<unistd.h>\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 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 .