Как создать каталог с правами 777?

Я хочу создать каталог с разрешением 777.

Код ниже создает каталог, но не с разрешениями, которые я запросил.

section .text
global _start:
_start:
             mov rax,83 ;syscall number for directory
             mov rdi,chaos ; dir name
             mov esi,00777Q ;permissions for directory
             syscall
             mov rax,60
             mov rdi,0
             syscall
section .data
           chaos:db 'somename'

person Ravi Teja Paruchuri    schedule 07.12.2018    source источник
comment
Здесь работает нормально, хотя вы должны поставить нулевой терминатор после имени каталога. Вас также может смутить параметр umask, применяемый поверх того, что вы укажете.   -  person Jester    schedule 07.12.2018


Ответы (1)


Вот man 2 mkdir:

Аргумент mode указывает режим для нового каталога (см. inode(7)). Он модифицируется umask процесса обычным образом: при отсутствии ACL по умолчанию режим создаваемого каталога — (mode & ~umask & 0777).

По сути, и ваша программа, и ваш пользователь могут наложить вето на каждый бит разрешения:

  • Вы можете сказать, какие биты вам удобны, передав их в mkdir
  • Пользователь может сказать, какие биты ему удобны, установив umask
  • Только биты, с которыми вы оба согласны, будут установлены в конечном каталоге.

Следовательно:

  • Если вы запустите umask 0000 перед запуском вашей программы, ваш каталог будет 0777.

  • Если вы запустите umask 0027, ваш каталог будет 0750.

  • Если вы хотите, чтобы ваш каталог был 777 вопреки желанию пользователя, вам нужно chmod("somename", 0777) на отдельном шаге.

person that other guy    schedule 07.12.2018
comment
Вы также можете сначала установить umask в 0, вызвав umask(0) внутри программы. - person fuz; 07.12.2018