COHERENT manpages
This page displays the COHERENT manpage for link() [Create a link].
List of available manpages
Index
link() -- System Call (libc) Create a link #include <unistd.h> link(old, new) char *old, *new; A link to a file is another name for the file. All attributes of the file appear identical among all links. link() creates a link called new to an existing file named old. For administrative reasons, it is an error for users other than the superuser to create a link to a directory. Such links can make the file system no longer tree structured unless carefully controlled, posing problems for commands such as find. Examples The first example, called lock.c, demonstrates how link() can be used to perform intertask locking. With this technique, a program can start a process in the background and stop any other user from starting the identical process. #include <unistd.h> main() { if(link("lock.c", "lockfile") == -1) { printf("Cannot link\n"); exit(1); } sleep(50); /* do nothing for 50 seconds */ unlink("lockfile"); printf("done\n"); exit(EXIT_SUCCESS); } The second example demonstrates how to use link() and unlink() to rename a file. #include <stdio.h> #include <unistd.h> main(argc, argv) int argc; char *argv[]; { register char *old, *new; if (argc != 3) { fprintf(stderr, "Usage: rename old new\n"); exit(EXIT_FAILURE); } old = argv[1]; new = argv[2]; if (link(old, new) == -1) { fprintf(stderr, "rename: link(%s, %s) failed\n", old, new); exit(EXIT_FAILURE); } else if (unlink(old) == -1) { fprintf(stderr, "rename: unlink(%s) failed\n", old); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } See Also find, libc, ln, rename(), unlink(), unistd.h POSIX Standard, §5.3.4 Diagnostics link() returns zero when successful. It returns -1 on errors, e.g., old does not exist, new already exists, attempt to link across file systems, or no permission to create new in the target directory. Notes Because each mounted file system is a self-contained entity, links between different mounted file systems fail.