Для каждого из U, G и O просто замените каждое r, w или x двоичным 1, а каждое - двоичным 0. Результатом является двоичное число.Это число не может быть больше двоичного числа 111, которое равно как десятичному, так и восьмеричному числу 7.
Таким образом, у вас есть одно восьмеричное число для каждого из U, G и O. Теперь просто сложите их вместе в правильномпоследовательность.Технически, вы бы умножили U на 8 ^ 2, G на 8 ^ 1, а O на 8 ^ 0, поскольку восьмеричные места - степени 8.
Кажется, все это объясняется в предоставленной вами ссылке.
РЕДАКТИРОВАТЬ: отвечая на
Спасибо, я все это понимаю, но если бы я написал это в форме или в программе, как бы я поступил?
Это зависит от используемого вами языка программирования.Вы хотите, чтобы программа преобразовывала числа или фактически использовала chmod?
EDIT: ответ для:
Вводом будет значение разрешений, например, 660. По стороне строки, например,.г + RW.Программа вычисляет новое значение разрешения.
Хорошо, поэтому сначала разделите текущие разрешения на U, G и O, а затем используйте строку, чтобы указать, какие из них следует изменить.Вы можете однозначно найти разрешения по числу и наоборот *, и вы знаете, что r = 4, w = 2 и x = 1, поэтому всякий раз, когда вы сталкиваетесь с числом, которое не имеет соответствующего набора условий, вы добавляете 4, 2 или 1 к нему.После этого вы должны проверить, является ли результат действительным.Если нет, просто установите его на 0.
Example: current=660 command=g+rw
u = 6
g = 6
o = 0
from string: we know we are modifying g only
g = 6 means: rw-
since rw is already set, we do not change anything
result = u+g+o = 660
return result
Допустим, вместо этого команда была + rw.То же самое, что и выше, произойдет для u и g, но когда o достигнуто, мы можем видеть, что оно равно 0, поэтому мы добавляем 4 для r и 2 для w, что дает нам 6. Это действительное число, поэтому мы объединяемвсе они и возвращают 666.
* Допустимые комбинации:
rwx 7
rw- 6
rx 5
r-- 4