gpt4 book ai didi

Perl:测试文件实际上是可写的,而不是检查文件权限

转载 作者:行者123 更新时间:2023-12-05 00:16:50 24 4
gpt4 key购买 nike

假设我有一个文件/var/tmp/filename.
在 Perl 中,我编写了以下代码段:

#!/usr/bin/env perl
use strict;
use warnings;

if (-W /var/tmp/filename)
{
...
}

exit;
-W 和 -w 函数( http://perldoc.perl.org/functions/-X.html )会检查文件是否可以实际写入,还是只检查文件权限是否允许写入?
我问的原因是我正在编写一个从服务器获取 cookie 的脚本。
此脚本需要能够将 cookie 文件写入文件系统,但如果 cookie 文件的文件系统路径是只读的,则该文件的权限无关紧要。所以我想测试 cookiefile 是否真的可写,而不是仅仅检查它的权限。

最佳答案

一般来说,-X 操作符只测试文件模式,而不是文件是否真的可写。因此,您将不得不测试实际执行操作,并捕获任何失败。

来自 http://perldoc.perl.org/functions/-X.html :

The interpretation of the file permission operators -r , -R , -w , -W , -x , and -X is by default based solely on the mode of the file and the uids and gids of the user. There may be other reasons you can't actually read, write, or execute the file: for example network filesystem access controls, ACLs (access control lists), read-only filesystems, and unrecognized executable formats. Note that the use of these six specific operators to verify if some operation is possible is usually a mistake, because it may be open to race conditions.



我刚刚在我的测试系统(Ubuntu 16.04)上使用文件系统文件系统的只读环回安装验证了这一点,并且 -W 标志确实错误地报告了该文件可以写入。

您可以使用 touch 命令:
$ touch /media/MountPoint/testfile
touch: cannot touch '/media/MountPoint/testfile': Read-only file system

使用 backtics 运行时,这将返回一个长度为零的字符串:
unless (length `touch $filename`) 
{
print "Can write\n";
}

关于Perl:测试文件实际上是可写的,而不是检查文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41324969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com