Forum Webscript.Ru

Программирование => Perl => Тема начата: RainMan от 23 Июня 2004, 11:10:03

Название: Help with (umask and system)
Отправлено: RainMan от 23 Июня 2004, 11:10:03
есть программа которая создает файлы с заведомо неправильными для меня permissions. Для исправления этого я использую комманду umask 022 в шелле и все становится ок!
Но если я в скрипте напишу umask 022 и через комманду system  из скрипта запущу свою прогу то она все равно не верно задает пермишинсы.... помогите плз! как из скрипта задавать маску по умолчанию???
Название: Help with (umask and system)
Отправлено: NeoNox от 23 Июня 2004, 11:30:23
perldoc -f chmod ?
Название: Help with (umask and system)
Отправлено: RainMan от 23 Июня 2004, 11:37:06
не... мне не нужно указывать для каждого файла необходимый пермишн или менять его (это слишком долго для моей задачи) для этого и используется маска которая по умолчанию выставляет те пермишины которые нужно давать файлы при создании их какой либо сторонней программой!
если из шелла задать маску и потом из этого же шелла создавfть файлы то все нормально - так как маска указывает какие пермишины по умолчанию нужно ставить!
если же запускать из перл скрипта программу которая занимается созданием файла то из шелла не переходит значение маски и соответственно файлы создаются с маской по умолчанию которая меня не устраивает!
вот вопрос в этом и заключается как заставить скрипт видет ту маску которую я задаю а не игнорировать ее?
Название: Help with (umask and system)
Отправлено: NeoNox от 23 Июня 2004, 11:58:12
покажи кусок кода где у тебя вызов system
Название: Help with (umask and system)
Отправлено: RainMan от 23 Июня 2004, 12:07:59
kod:

$command="my_proga";
umask 022;
system "$command";
Название: Help with (umask and system)
Отправлено: vladsu от 23 Июня 2004, 12:44:35
perldoc -f umask

И задавайте Вашу маску в начале перл скрипта который создаёт файлы. А для создания файла что-нибудь типа

sysopen  (FILE, $OutFile, O_CREAT, 0666) or die "$!\\n";
Название: Help with (umask and system)
Отправлено: RainMan от 23 Июня 2004, 13:48:17
зачем тада создавать маску если уже указали пермишн для файла? маска для того и служит чтоб если ничего не указывать то создается файл с пермишинами по умолчанию - как в маске!

проблема решилась немного другим образом!
я использовал системный umask а есть еще перловый который корректно отработал!
всем спасибо!
Название: Help with (umask and system)
Отправлено: vladsu от 23 Июня 2004, 16:04:35
Цитировать
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
Цитировать
маска для того и служит чтоб если ничего не указывать то создается файл с пермишинами по умолчанию - как в маске!

Это верно.
Название: Help with (umask and system)
Отправлено: RainMan от 23 Июня 2004, 17:11:43
понятно!
спасибо!