OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / original / man2 / symlink.2
index 935ef86..3e99980 100644 (file)
@@ -1,8 +1,8 @@
-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
-.\"                               1993 Michael Haardt, Ian Jackson.
+.\"             and Copyright (C) 1993 Michael Haardt, Ian Jackson.
+.\"            and Copyright (C) 2006, 2014 Michael Kerrisk
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -22,6 +22,7 @@
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\" Modified 1993-07-24 by Rik Faith
 .\" Modified 1996-04-26 by Nick Duffek <nsd@bbc.com>
 .\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
 .\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
 .\"
-.TH SYMLINK 2 2007-07-26 "Linux" "Linux Programmer's Manual"
+.TH SYMLINK 2 2014-08-19 "Linux" "Linux Programmer's Manual"
 .SH NAME
-symlink \- make a new name for a file
+symlink, symlinkat \- make a new name for a file
 .SH SYNOPSIS
+.nf
+.B #include <unistd.h>
+.sp
+.BI "int symlink(const char *" target ", const char *" linkpath );
+.sp
+.BR "#include <fcntl.h>           " "/* Definition of AT_* constants */"
 .B #include <unistd.h>
 .sp
-.BI "int symlink(const char *" oldpath ", const char *" newpath );
+.BI "int symlinkat(const char *" target ", int " newdirfd \
+", const char *" linkpath );
 .sp
+.fi
 .in -4n
 Feature Test Macro Requirements for glibc (see
 .BR feature_test_macros (7)):
@@ -44,14 +53,30 @@ Feature Test Macro Requirements for glibc (see
 .sp
 .ad l
 .BR symlink ():
-_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _POSIX_C_SOURCE\ >=\ 200112L
+.RS 4
+_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
+_XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L
+.RE
+.sp
+.BR symlinkat ():
+.PD 0
+.ad l
+.RS 4
+.TP 4
+Since glibc 2.10:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP
+Before glibc 2.10:
+_ATFILE_SOURCE
+.RE
 .ad b
+.PD
 .SH DESCRIPTION
 .BR symlink ()
 creates a symbolic link named
-.I newpath
+.I linkpath
 which contains the string
-.IR oldpath .
+.IR target .
 
 Symbolic links are interpreted at run time as if the contents of the
 link had been substituted into the path being followed to find a file or
@@ -74,11 +99,45 @@ the sticky bit
 set.
 
 If
-.I newpath
-exists it will
+.I linkpath
+exists, it will
 .I not
 be overwritten.
-.SH "RETURN VALUE"
+.SS symlinkat()
+The
+.BR symlinkat ()
+system call operates in exactly the same way as
+.BR symlink (),
+except for the differences described here.
+
+If the pathname given in
+.I linkpath
+is relative, then it is interpreted relative to the directory
+referred to by the file descriptor
+.I newdirfd
+(rather than relative to the current working directory of
+the calling process, as is done by
+.BR symlink ()
+for a relative pathname).
+
+If
+.I linkpath
+is relative and
+.I newdirfd
+is the special value
+.BR AT_FDCWD ,
+then
+.I linkpath
+is interpreted relative to the current working
+directory of the calling process (like
+.BR symlink ()).
+
+If
+.I linkpath
+is absolute, then
+.I newdirfd
+is ignored.
+.SH RETURN VALUE
 On success, zero is returned.
 On error, \-1 is returned, and
 .I errno
@@ -87,35 +146,40 @@ is set appropriately.
 .TP
 .B EACCES
 Write access to the directory containing
-.I newpath
+.I linkpath
 is denied, or one of the directories in the path prefix of
-.I newpath
+.I linkpath
 did not allow search permission.
 (See also
 .BR path_resolution (7).)
 .TP
+.B EDQUOT
+The user's quota of resources on the filesystem has been exhausted.
+The resources could be inodes or disk blocks, depending on the filesystem
+implementation.
+.TP
 .B EEXIST
-.I newpath
+.I linkpath
 already exists.
 .TP
 .B EFAULT
-.IR oldpath " or " newpath " points outside your accessible address space."
+.IR target " or " linkpath " points outside your accessible address space."
 .TP
 .B EIO
 An I/O error occurred.
 .TP
 .B ELOOP
 Too many symbolic links were encountered in resolving
-.IR newpath .
+.IR linkpath .
 .TP
 .B ENAMETOOLONG
-.IR oldpath " or " newpath " was too long."
+.IR target " or " linkpath " was too long."
 .TP
 .B ENOENT
 A directory component in
-.I newpath
+.I linkpath
 does not exist or is a dangling symbolic link, or
-.I oldpath
+.I target
 is the empty string.
 .TP
 .B ENOMEM
@@ -127,33 +191,73 @@ entry.
 .TP
 .B ENOTDIR
 A component used as a directory in
-.I newpath
+.I linkpath
 is not, in fact, a directory.
 .TP
 .B EPERM
-The file system containing
-.I newpath
+The filesystem containing
+.I linkpath
 does not support the creation of symbolic links.
 .TP
 .B EROFS
-.I newpath
-is on a read-only file system.
-.SH "CONFORMING TO"
-SVr4, 4.3BSD, POSIX.1-2001.
+.I linkpath
+is on a read-only filesystem.
+.PP
+The following additional errors can occur for
+.BR symlinkat ():
+.TP
+.B EBADF
+.I newdirfd
+is not a valid file descriptor.
+.TP
+.B ENOENT
+.I linkpath
+is a relative pathname and
+.IR newdirfd
+refers to a directory that has been deleted.
+.TP
+.B ENOTDIR
+.I linkpath
+is relative and
+.I newdirfd
+is a file descriptor referring to a file other than a directory.
+.SH VERSIONS
+.BR symlinkat ()
+was added to Linux in kernel 2.6.16;
+library support was added to glibc in version 2.4.
+.SH CONFORMING TO
+.BR symlink ():
+SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
 .\" SVr4 documents additional error codes EDQUOT and ENOSYS.
 .\" See
 .\" .BR open (2)
 .\" re multiple files with the same name, and NFS.
+
+.BR symlinkat ():
+POSIX.1-2008.
 .SH NOTES
 No checking of
-.I oldpath
+.I target
 is done.
 
-Deleting the name referred to by a symlink will actually delete the
+Deleting the name referred to by a symbolic link will actually delete the
 file (unless it also has other hard links).
 If this behavior is not desired, use
 .BR link (2).
-.SH "SEE ALSO"
+.SS Glibc notes
+On older kernels where
+.BR symlinkat ()
+is unavailable, the glibc wrapper function falls back to the use of
+.BR symlink (2).
+When
+.I linkpath
+is a relative pathname,
+glibc constructs a pathname based on the symbolic link in
+.IR /proc/self/fd
+that corresponds to the
+.IR newdirfd
+argument.
+.SH SEE ALSO
 .BR ln (1),
 .BR lchown (2),
 .BR link (2),
@@ -161,7 +265,15 @@ If this behavior is not desired, use
 .BR open (2),
 .BR readlink (2),
 .BR rename (2),
-.BR symlinkat (2),
 .BR unlink (2),
 .BR path_resolution (7),
 .BR symlink (7)
+.SH COLOPHON
+This page is part of release 3.79 of the Linux
+.I man-pages
+project.
+A description of the project,
+information about reporting bugs,
+and the latest version of this page,
+can be found at
+\%http://www.kernel.org/doc/man\-pages/.