Хорошая новость для вас, что если вы не дают абсолютные пути к функциям принимая адрес файла, такие как fopen
или mkdir
, они всегда предполагают, что путь относится к текущему адресу. Поэтому, если вы пишете:
mkdir("Outputs");
всегда будет сделать каталог Outputs
где вы запустите код. Если вы хотите создать каталог, в котором находится сам исполняемый файл (не там, где вы его запускаете), вы можете увидеть this question, как получить местоположение исполняемого исполняемого файла. Короче говоря, в linux вы можете read, что /proc/self/exe
указывает на. (Вы, скорее всего, хотите первый, хотя)
Что касается разрешения, то вы можете просто дать ему 0777 (восьмеричный для 111111111), что означает, что все разрешения доступны. mkdir
(на самом деле системный вызов под ним) автоматически удаляет разрешения, которые у вас отсутствуют, поэтому вы не можете предоставить права на каталоги, которые у вас сами нет).
Если вы не знаете, что представляют собой эти биты, вы можете прочитать на нем in wikipedia. Ради полноты я дам краткое объяснение. Права доступа в традиционных системах Unix (те возвращаются, когда вы делаете ls -l
) в виде:
drwxrwxrwx
|\_/\_/\_/
| | | |
T O G R
T
говорит, что тип файла, например d
для каталога. O
- это набор из трех разрешений для владельца файла, G
- это аналогичные разрешения, но для группы, к которой принадлежит владелец файла, и R
- разрешение для других (извините, начальный O
уже был использован;). Каждый набор разрешений (rwx
) выбирает права на чтение, запись и выполнение. Вам понадобится разрешение на выполнение в каталоге, чтобы иметь возможность перейти к нему.
Так что если вы хотите, чтобы какой-то каталог для вас не был скрыт от других, вы можете дать разрешение как 0755. Частный каталог может иметь разрешение 0750, а супер-частное может иметь разрешение 0700. Общий каталог среди всех пользователей может иметь разрешение 0777.
Вы можете проконсультироваться с «man 2 chdir» –
Просто не указывайте полный путь к папке для создания выходов. Вы можете дать ему относительный путь. вы также можете запустить 'man 2 getcwd', чтобы узнать, как получить текущий каталог. – blueblob