link() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

link() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

link - 为文件创建新名称

概要

#include <unistd.h>

int link(const char *oldpath, const char *newpath);

描述

link() 创建一个到现有文件的新链接(也称为硬链接)。

如果newpath存在,则不会被覆盖。

此新名称可用于任何操作,其用法与旧名称完全相同;这两个名称都引用同一个文件(因此具有相同的权限和所有权),无法区分哪个名称是“原始”名称。

返回值

成功时,返回零。失败时,返回 -1,并相应地设置errno

错误

标签描述
EACCES 拒绝写入包含newpath的目录的访问权限,或者拒绝搜索oldpathnewpath路径前缀中的一个目录的搜索权限。(另请参见path_resolution(2)。)
EEXIST newpath已存在。
EFAULT oldpathnewpath指向您可访问的地址空间之外。
EIO 发生I/O错误。
ELOOP 在解析oldpathnewpath时遇到太多符号链接。
EMLINK oldpath引用的文件已达到其最大链接数。
ENAMETOOLONG
  oldpathnewpath太长。
ENOENT oldpathnewpath中的目录组件不存在或是不存在的符号链接。
ENOMEM 可用内核内存不足。
ENOSPC 包含该文件的设备没有足够空间用于新的目录条目。
ENOTDIR
 oldpathnewpath中用作目录的组件实际上不是目录。
EPERM oldpath是一个目录。
EPERM 包含oldpathnewpath的文件系统不支持创建硬链接。
EROFS 该文件位于只读文件系统上。
EXDEV oldpathnewpath不在同一个已挂载的文件系统上。(Linux允许将文件系统挂载到多个点,但link(2)不适用于不同的挂载点,即使同一个文件系统同时挂载在这两个点上也是如此。)

备注

link()创建的硬链接不能跨越文件系统。如果需要这样做,请使用symlink()。

POSIX.1-2001规定,如果oldpath是符号链接,则link()应该取消引用oldpath。但是,Linux不会这样做:如果oldpath是符号链接,则newpath被创建为指向相同符号链接文件的(硬)链接(即,newpath成为指向与oldpath引用的文件相同的符号链接)。一些其他实现的行为与Linux相同。

符合标准

SVr4、4.3BSD、POSIX.1-2001(除上述说明外)。

缺陷

在NFS文件系统上,如果NFS服务器执行链接创建并在发出确认之前崩溃,则返回代码可能错误。使用stat(2)来确定链接是否已创建。

参见



previous next Printer Friendly

广告


  

广告



广告