Вот что я не понимаю. В Perl'е, скажем, у меня есть файл (ручка) $file
затемПередача разрешений на функции chmod и mkdir perl
my $mode = (stat $file)[2];
дает режим файла, описанный как тип и права доступа. Затем в документах для chmod рекомендуется скрыть тип файла при отправке режима от stat до chmod, например,
my $perm = (stat $file)[2] & 07777;
chmod($perm | 0600, $file);
Аналогично, документы для mkdir показывают, что mkdir(FILENAME,MASK)
«создает каталог, указанный FILENAME
, с правами указанных MASK
(с изменениями, внесенными UMASK).»
Alrighty. Вот чего я не понимаю. В командной строке я создаю dir temp в моем домашнем каталоге с разрешениями по умолчанию drwxr-xr-x (октал 0755). Тогда стат
- Perl говорит мне, что режим этого каталога является 16877.
$perms = (stat 'temp')[2] & 07777;
возвращает 493.$perms = sprintf("%04o",(stat 'temp')[2] & 07777);
возвращает 0755.
chmod(x,'temp')
Я ожидал, что при х = (1) и (2) изменить разрешения на temp/
на что-то вялое. Но все трое дают drwxr-xr-x
(правда, с (3) вы должны сделать chmod(oct($perms),'temp);
) Аналогичным образом, mkdir(temp,16877)
, mkdir(temp,493)
, mkdir(temp,0755)
все дают разрешения drwxr-xr-x
на temp/
.
Итак, мой вопрос: что же происходит? Как это так: chmod и mkdir принимают эти три разных значения и устанавливают одинаковые разрешения на temp/
? Я понимаю, что один ответ может быть «есть несколько способов сделать это», и это прекрасно, насколько это возможно, но я хотел бы понять, что здесь происходит. Кроме того, каков рекомендуемый способ передачи значений разрешений этим функциям? Благодаря!
Я не могу понять выражение «chmod (x,« temp ») с x = (1) и (2)». Вы можете уточнить? – msw