Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод на экран прав доступа в восьмеричном формате, Вывод на экран прав доступа в восьмеричн 
V
    Опции темы
Arsk
Дата 27.8.2012, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 10.4.2011

Репутация: нет
Всего: нет



Здравствуйте!
Подскажите, пожалуйста, каким образом можно перевести права доступа в восьмеричный формат?
Допустим, команда ls выводит на экран права доступа в формате, например, "-rwxr-xr-x", необходимо это преобразовать в восьмеричный формат...
Кто-нибудь знает?
PM MAIL   Вверх
tzirechnoy
Дата 28.8.2012, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



файл octal.awk:
Код

#!/usr/bin/awk -f
BEGIN { FS="[ ]" }
function failc( pos, char, file ) {
        print "Unknown mode char at pos ",pos,":",char," file ",file ;
        exit 2
}
(FNR==1) ;
(FNR>1) {
        split($1,MODE,""); perm=0;
             if (MODE[2]=="r") {perm+=400}
        else if (MODE[2]!="-") {failc(2, MODE[2], $0)};
             if (MODE[3]=="w") {perm+=200}
        else if (MODE[3]!="-") {failc(3,MODE[3], $0)};
             if (MODE[4]=="x") {perm+=100}
        else if (MODE[4]=="s") {perm+=4100}
        else if (MODE[4]=="S") {perm+=4000}
        else if (MODE[4]!="-") {failc(4,MODE[4],$0)};
             if (MODE[5]=="r") {perm+=40}
        else if (MODE[5]!="-") {failc(5,MODE[5],$0)};
             if (MODE[6]=="w") {perm+=20}
        else if (MODE[6]!="-") {failc(6,MODE[6],$0)};
             if (MODE[7]=="x") {perm+=10}
        else if (MODE[7]=="s") {perm+=2010}
        else if (MODE[7]=="S") {perm+=2000}
        else if (MODE[7]!="-") {failc(7,MODE[7],$0)};
             if (MODE[8]=="r") {perm+=4}
        else if (MODE[8]!="-") {failc(8,MODE[8],$0)};
             if (MODE[9]=="w") {perm+=2}
        else if (MODE[9]!="-") {failc(9,MODE[9],$0)};
             if (MODE[10]=="x") {perm+=1}
        else if (MODE[10]=="t") {perm+=1001}
        else if (MODE[10]=="T") {perm+=1000}
        else if (MODE[10]!="-") {failc(10,MODE[10],$0)};
             if (MODE[11]=="+") {
                print "Unable to convert POSIX ACL to file mode for",$0;
                exit 2; }
        else if (MODE[11]!="")  {failc(11,MODE[11],$0)};
        $1="0"perm;
        print;
}


Использовать в стиле ls -lb |octal.awk
Досконально не тэстировал, наверняка есть много неочевидного.
PM MAIL   Вверх
Arsk
Дата 28.8.2012, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 10.4.2011

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 28.8.2012,  00:51)
файл octal.awk:
Код

#!/usr/bin/awk -f
BEGIN { FS="[ ]" }
function failc( pos, char, file ) {
        print "Unknown mode char at pos ",pos,":",char," file ",file ;
        exit 2
}
(FNR==1) ;
(FNR>1) {
        split($1,MODE,""); perm=0;
             if (MODE[2]=="r") {perm+=400}
        else if (MODE[2]!="-") {failc(2, MODE[2], $0)};
             if (MODE[3]=="w") {perm+=200}
        else if (MODE[3]!="-") {failc(3,MODE[3], $0)};
             if (MODE[4]=="x") {perm+=100}
        else if (MODE[4]=="s") {perm+=4100}
        else if (MODE[4]=="S") {perm+=4000}
        else if (MODE[4]!="-") {failc(4,MODE[4],$0)};
             if (MODE[5]=="r") {perm+=40}
        else if (MODE[5]!="-") {failc(5,MODE[5],$0)};
             if (MODE[6]=="w") {perm+=20}
        else if (MODE[6]!="-") {failc(6,MODE[6],$0)};
             if (MODE[7]=="x") {perm+=10}
        else if (MODE[7]=="s") {perm+=2010}
        else if (MODE[7]=="S") {perm+=2000}
        else if (MODE[7]!="-") {failc(7,MODE[7],$0)};
             if (MODE[8]=="r") {perm+=4}
        else if (MODE[8]!="-") {failc(8,MODE[8],$0)};
             if (MODE[9]=="w") {perm+=2}
        else if (MODE[9]!="-") {failc(9,MODE[9],$0)};
             if (MODE[10]=="x") {perm+=1}
        else if (MODE[10]=="t") {perm+=1001}
        else if (MODE[10]=="T") {perm+=1000}
        else if (MODE[10]!="-") {failc(10,MODE[10],$0)};
             if (MODE[11]=="+") {
                print "Unable to convert POSIX ACL to file mode for",$0;
                exit 2; }
        else if (MODE[11]!="")  {failc(11,MODE[11],$0)};
        $1="0"perm;
        print;
}


Использовать в стиле ls -lb |octal.awk
Досконально не тэстировал, наверняка есть много неочевидного.

А на Си это можно написать?
PM MAIL   Вверх
tzirechnoy
Дата 28.8.2012, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
А на Си это можно написать?


Не возражаю. Пишыте.

PM MAIL   Вверх
bsa
Дата 28.8.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(Arsk @  27.8.2012,  21:57 Найти цитируемый пост)
Подскажите, пожалуйста, каким образом можно перевести права доступа в восьмеричный формат?
Код
struct stat buf;
if (stat("/path/to/file", &buf)) {
   perror("stat failed");
   exit(1);
}
printf("file permissions is %04o\n", buf.st_mode & 07777);

PM   Вверх
rsm
Дата 1.9.2012, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 999
Регистрация: 16.3.2005

Репутация: 3
Всего: 62



Из bash:
Код

stat -c '%a' file

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.