【问题标题】:unlink vs remove in c++在 C++ 中取消链接与删除
【发布时间】:2011-01-12 15:22:04
【问题描述】:

C++ 中的 remove 和 unlink 函数有什么区别?

【问题讨论】:

  • 我怀疑你会注意到速度上的任何差异。做出选择不会是运营成本高昂的部分。

标签: c++ unix posix erase


【解决方案1】:

除了 unlink 是特定于 unix 的(正如 Chris 指出的那样),我们在 POSIX 手册中阅读:

如果 path 没有命名目录,remove(path) 等价于 unlink(path)。 如果 path 命名一个目录,remove(path) 等价于 rmdir(path)。

至于目录传递的unlink,我们阅读:

除非进程具有适当的权限并且实现支持在目录上使用 unlink(),否则路径参数不得命名目录。 (...) 应用程序应该使用 rmdir() 来删除一个目录。

【讨论】:

    【解决方案2】:

    remove 是可移植的,unlink 是 Unix 特定的。 :-P

    【讨论】:

      【解决方案3】:

      remove() 函数删除路径指定的文件或目录。

      如果 path 指定一个目录,remove(path) 相当于 rmdir(path)。否则,它相当于unlink(path)

      发件人:man remove

      祝你好运;)

      【讨论】:

      • 请注意,这是特定于类 Unix 系统的(考虑到问题上的标签,这是完全合适的)。 ISO C 标准定义了remove 函数;它没有说明目录。 POSIX 扩展了您所描述的行为。
      【解决方案4】:

      unlink 不是 unix 特有的,我不知道人们为什么这么说。见 io.h。虽然你可能不得不做类似的事情

      #define unlink _unlink
      

      http://msdn.microsoft.com/en-us/library/1c3tczd6%28v=VS.100%29.aspx

      http://msdn.microsoft.com/en-us/library/2da4hk1d%28v=VS.100%29.aspx

      【讨论】:

      • unlink 是一个 Posix 函数。 MS 在其编译器的 C 运行时标头中包含了许多 Posix 函数,但这污染了命名空间。为了更符合 C 标准,MS 后来用带下划线前缀的版本替换了他们提供的一些 Posix 函数(并删除了其他函数)。前导下划线保留给实现。通常,C 运行时函数比 Posix 函数更可移植。通常,Posix 函数非常以 unix 为中心,尽管一些非 unix 操作系统可能提供一些 Posix 支持。
      • 不,我们不同意。 unlink 是一个 Posix 函数。 Posix 是对 Unix 派生操作系统进行标准化的尝试。 _unlink 是一个在非 Unix 操作系统上工作的不同函数。
      • 它可能是一个unix函数,但是你可以定义它,这样如果它是windows操作系统时,如果它在代码中发现unlink,它实际上是去_unlink的定义。我认为这就是@bviktor 所暗示的。
      【解决方案5】:

      remove() 是 C++ 标准 (N4860 29.11.14.30) 的一部分。 unlink() 不是。

      【讨论】:

        猜你喜欢
        • 2018-02-12
        • 1970-01-01
        • 2020-03-24
        • 2017-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多