2013-11-10 6 views
0

У меня есть программа, которая работает на ./Desktop/TestFolder0 в Ubuntu.Создание каталогов на локальной папке

Когда программа запускается внутри этого TestFolder0, я хочу создать папку с именем Outputs и внутри этой папки сохранить файл Output.txt. Так он выглядит:

./Desktop/TestFolder0/Outputs 

Я хочу написать свой код таким образом, что, если я перееду свою программу в TestFolderN новой папки и output.txt всегда будет сохранен там.

Я смотрел Creating a new directory in C, который научил меня о mkdir. Я до сих пор не знаю, как его использовать, например, мне нужно указать путь к новому каталогу, но я не знаю, как указать, где я находится в иерархии папок. Я также должен дать mkdir права, которые позволяют папка будет открыта и т.д.

Пожалуйста, помогите

+0

Вы можете проконсультироваться с «man 2 chdir» –

+0

Просто не указывайте полный путь к папке для создания выходов. Вы можете дать ему относительный путь. вы также можете запустить 'man 2 getcwd', ​​чтобы узнать, как получить текущий каталог. – blueblob

ответ

0

Хорошая новость для вас, что если вы не дают абсолютные пути к функциям принимая адрес файла, такие как 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.

+0

это как раз epic, спасибо –

+0

@CharlieK, конечно! – Shahbaz

Смежные вопросы