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

Perl 如果getcwd()没有访问权限,为什么要退回到cwd()?,perl,Perl,模块使用此函数在编译时确定当前工作目录(请参阅源代码): 其中cwd()和getcwd()都是从模块导入的。在哪些情况下,getcwd()会失败,但cwd()仍然有效?(如果有必要的话,我对Linux平台最感兴趣) 另见: 如评论所述,getcwd()如果进程没有足够的权限访问当前目录(及其所有祖先目录),则可能会失败cwd()有可能抛出一个可能的setuid外部pwd命令,并在这种情况下获取目录 更一般地说,getcwd()的行为类似于POSIXgetcwd调用cwd()被记录为更灵活。

模块使用此函数在编译时确定当前工作目录(请参阅源代码):

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

另见:


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

更一般地说,
getcwd()
的行为类似于POSIX
getcwd
调用<代码>cwd()被记录为更灵活。它们之间的差异在Linux上可能非常小,但是
Cwd
FindBin
模块都打算在Perl支持的所有平台上工作。这些包括Windows、VMS、OSX之前的MacOS、IBMz/OS和大量其他操作系统。在这些方面,命令之间的差异可能非常显著

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;
}