perl函数说明(chmod)

chmod
   chmod LIST

这个函数改变一列文件的权限。列表的第一个元素必须是一个数字模式,就象在 chmod(2) 系统调用里的一样。该函数返回成功改变了的文件的数目。比如:

    $cnt = chmod 0755, 'file1', 'file2';

会把 $cnt 设置为 0,1,或 2,具体是多少取决于改变的文件的数目。成功是通过没有错误来表示的,而不是通过实际的修改的数目,因为一个文件可能会拥有和操作之前相同的模式。一个错误可能意味着你缺乏修改文件模式的足够的权限,你可能既不是文件的所有者也不是超级用户。检查 $! 看看失败的实际原因是什么。

下面是更多的一些典型用法:

   chmod(0755, @executables) == @executables
      or die "couldn't chmod some of @executables: $!";

如果你想知道是哪个文件不允许这样的修改,使用象下面这样的代码:

   @cannot = grep {not chmod 0755, $_} 'file1', 'file2', 'file3';
   die "$0: could no chmod @cannot\n" if @cannot;

这个惯用法使用 grep 函数选择列表里那些 chmod 函数对之操作失败的元素。

如果使用非文本模式数据,那么你可能需要用 oct 函数把一个八进制字串转换成一个数字。这就是为什么 Perl 不会因为一个字串有一个前导 "0" 而就假定它包含一个八进制数字。

   $DEF_MODE = 0644;      # 这里不能用引号!
   PROMPT: {
      print "New mode? ";
      $strmode = ;
         exit unless defined $strmode;      # 测试 eof
      if ($strmode =~ /^\s*$/) {            # 测试空白行
         $mode = $DEF_MODE;
      }
      elsif ($strmode !~ /^\d+$/) {
         print "Want numeric mode, no $strmode\n";
         redo PROMPT;
      }
      else {
         $mode = oct($strmode);         # 把 "755" 转换成 0755
      }
      chmod $mode, @files;
   }

这个函数与数字模式一起使用的时候很象 Unix chmod(2) 系统调用。如果你需要象 chmod(1) 命令提供的那样的符号接口,你可以看看 CPAN 上的 File::chmod 模块。

你还可以从 Fcntl 模块里输入 S_I* 符号常量:

   use Fcntl ':mode';
   chmod S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH , @executalbes;

有些人认为上面这个比 0755 的可读性更好。你可以自己试试。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值