2011-02-08 2 views

ответ

5

От perldoc:

$mode = (stat($filename))[2]; 
printf "Permissions are %04o\n", $mode & 07777; 

Для извлечения чтения для-других бит вы можете сделать

print "read for everyone" if $mode & 4; # pick bit 2 from mode 
+3

Не совсем правильная вещь в неясных случаях, когда «другие» могут читать, но «пользователь» или «группа» не могут. Кроме того, лучше использовать File :: Stat и Fcntl, чтобы избежать использования жестко закодированных чисел. – mscha

+3

@mscha Согласитесь, что константы лучше, однако они ничего не говорят мне, пока я не посмотрю документы. В неясных случаях по-прежнему можно выполнить '$ mode & 0444 == 0444'. +1 для вашего примера. – bvr

+0

полностью согласны с тем, что константы слишком загадочны. Однако я не знаю лучшего, правильного современного решения Perl. – mscha

2

Используйте функцию stat.

+0

как я могу это сделать? – Tree

+3

@Tree: Если вы когда-либо не знаете команду, проверьте ее с помощью 'perldoc -f stat' или проверки [stat at perldoc.perl.org] (http://perldoc.perl.org/functions/stat.html) – Tim

9

(относительно) современное решение: использовать File::stat, основной модуль, так как 5.004 и Fcntl , который всегда находился в Perl 5. См. также perldoc -f stat.

use strict; 
use warnings; 
use File::stat; 
use Fcntl qw(:mode); 

... 

my $mode = stat($filename)->mode; 
my $allCanRead = ($mode & S_IRUSR) # User can read 
       && ($mode & S_IRGRP) # Group can read 
       && ($mode & S_IROTH); # Others can read 
Смежные вопросы