如果getcwd()没有访问权限,为什么还要回到cwd()?

时间:2016-02-28 16:29:00

标签: perl

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平台)

另见:

1 个答案:

答案 0 :(得分:4)

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

更一般地说,getcwd的行为与POSIX cwd()调用类似。 Cwd被记录为更灵活。它们之间的差异在Linux上可能非常小,但FindBin和{{1}}模块都适用于Perl支持的所有平台。其中包括Windows,VMS,OSX前MacOS,IBM z / OS以及其他一些产品。在那些,命令之间的差异可能很大。