【问题标题】:Why fall back to cwd() if getcwd() does not have access?如果 getcwd() 无权访问,为什么要回退到 cwd()?
【发布时间】:2016-06-11 15:21:19
【问题描述】:

FindBin 模块在编译时使用该函数确定当前工作目录(参见源代码here):

sub cwd2 {
   my $cwd = getcwd();
   # getcwd might fail if it hasn't access to the current directory.
   # try harder.
   defined $cwd or $cwd = cwd();
   $cwd;
}

其中cwd()getcwd() 都是从Cwd 模块导入的。在哪些情况下getcwd() 会失败但cwd() 仍然有效? (如果重要的话,我对 Linux 平台最感兴趣)

另见:

【问题讨论】:

    标签: perl


    【解决方案1】:

    正如评论所说,如果进程没有足够的权限访问当前目录(及其所有祖先),getcwd() 可能会失败。 cwd() 有可能使用可能设置为外部的pwd 命令并在这种情况下获取目录。

    更一般地说,getcwd() 的行为类似于 POSIX getcwd 调用。 cwd() 被记录为更灵活。它们之间的差异在 Linux 上可能非常小,但 CwdFindBin 模块都旨在在 Perl 支持的所有平台上工作。其中包括 Windows、VMS、pre-OSX MacOS、IBM z/OS 和其他一大堆。在这些方面,命令之间的差异可能很大。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2022-06-13
      相关资源
      最近更新 更多