Forum Webscript.Ru
Программирование => Perl => Тема начата: RainMan от 23 Июня 2004, 11:10:03
-
есть программа которая создает файлы с заведомо неправильными для меня permissions. Для исправления этого я использую комманду umask 022 в шелле и все становится ок!
Но если я в скрипте напишу umask 022 и через комманду system из скрипта запущу свою прогу то она все равно не верно задает пермишинсы.... помогите плз! как из скрипта задавать маску по умолчанию???
-
perldoc -f chmod ?
-
не... мне не нужно указывать для каждого файла необходимый пермишн или менять его (это слишком долго для моей задачи) для этого и используется маска которая по умолчанию выставляет те пермишины которые нужно давать файлы при создании их какой либо сторонней программой!
если из шелла задать маску и потом из этого же шелла создавfть файлы то все нормально - так как маска указывает какие пермишины по умолчанию нужно ставить!
если же запускать из перл скрипта программу которая занимается созданием файла то из шелла не переходит значение маски и соответственно файлы создаются с маской по умолчанию которая меня не устраивает!
вот вопрос в этом и заключается как заставить скрипт видет ту маску которую я задаю а не игнорировать ее?
-
покажи кусок кода где у тебя вызов system
-
kod:
$command="my_proga";
umask 022;
system "$command";
-
perldoc -f umask
И задавайте Вашу маску в начале перл скрипта который создаёт файлы. А для создания файла что-нибудь типа
sysopen (FILE, $OutFile, O_CREAT, 0666) or die "$!\\n";
-
зачем тада создавать маску если уже указали пермишн для файла? маска для того и служит чтоб если ничего не указывать то создается файл с пермишинами по умолчанию - как в маске!
проблема решилась немного другим образом!
я использовал системный umask а есть еще перловый который корректно отработал!
всем спасибо!
-
RainMan:
зачем тада создавать маску если уже указали пермишн для файла?
#umask
022
Вариант 1
#more t.pl
#!/usr/local/bin/perl
use strict;
use Fcntl;
umask 011;
sysopen (TEXT, \'test.txt\', O_CREAT, 0666) || die "$!\\n";
#./t.pl
#ls -la
-rw-rw-rw- 1 root root 0 Jun 23 13:50 test.txt
#rm test.txt
Вариант 2
#more t.pl
#!/usr/local/bin/perl
use strict;
use Fcntl;
sysopen (TEXT, \'test.txt\', O_CREAT, 0666) || die "$!\\n";
#./t.pl
#ls -la
-rw-r--r-- 1 root root 0 Jun 23 13:50 test.txt
#rm test.txt
Вариант 3
#more t.pl
#!/usr/local/bin/perl
use strict;
use Fcntl;
umask 011;
sysopen (TEXT, \'test.txt\', O_CREAT, 0777) || die "$!\\n";
#./t.pl
#ls -la
-rwxrw-rw- 1 root root 0 Jun 23 13:50 test.txt
#rm test.txt
#rm test.txt
Вариант 4
#more t.pl
#!/usr/local/bin/perl
use strict;
use Fcntl;
umask 011;
sysopen (TEXT, \'test.txt\', O_CREAT) || die "$!\\n";
#./t.pl
#ls -la
-rw-rw-rw- 1 root root 0 Jun 23 13:50 test.txt
#rm test.txt
Вариант 5
#more t.pl
#!/usr/local/bin/perl
use strict;
use Fcntl;
sysopen (TEXT, \'test.txt\', O_CREAT) || die "$!\\n";
#./t.pl
#ls -la
-rw-r--r-- 1 root root 0 Jun 23 13:50 test.txt
#rm test.txt
маска для того и служит чтоб если ничего не указывать то создается файл с пермишинами по умолчанию - как в маске!
Это верно.
-
понятно!
спасибо!