mkdir в / tmp не работает: «Отказано в доступе» - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь написать программу для ведения журнала для приложения.Это должно записывать журналы в /tpm/app-name/log.txt.Чтобы сделать это, мне нужно сделать каталог app-name перед записью, на случай, если он не существует.Однако мой код не создаст каталог, даже если он работает с правильными разрешениями для этого.

Я пытался: * использовать chdir для перехода на /tmp и создать каталог app-nameпотом * запуск программы с правами root (это менее чем желательно и выдает ошибку кода из-за того, что строка 65 не имеет доступа к текущей среде, в которой работает остальная часть системы).

Я бы хотелэта программа сможет работать из любой точки системы.

Мой текущий код на C ++:

#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <bits/stdc++.h>
#include <sys/stat.h>
#include <sys/types.h>

using namespace std;

int main(int argc, char* argv[])
{
        string name = argv[1];
        string DIR = "/tmp/" + name;
        string LOG_LOCATION = DIR + "/log.txt";
        int len = DIR.length();
        char LOG_DIR[len + 1];
        strcpy(LOG_DIR, DIR.c_str());
        string OUTPUT_LOG = "Some error log text";
        ofstream log;
        cout << OUTPUT_LOG << endl;
        if (mkdir(LOG_DIR, 1777) == -1)
        {
            cerr << "ERROR:  " << strerror(errno) << endl;
        }
        else
        {
            cout << "Directory created";
        }
        log.open (LOG_LOCATION);
        log << OUTPUT_LOG << endl;
        log.close();
}

При использовании этой программы код компилируется и даже работает нормально.Это просто не делает каталог, как я ожидаю.Из-за этого он также не создает файл журнала.

Спасибо!

1 Ответ

0 голосов
/ 08 июля 2019

Так что я чувствую себя действительно глупо, но я выяснил, каким был ответ на мой вопрос.

Во-первых, я передавал неверную информацию о stdin (программа использовала эту информацию для создания правильной информации).папка, и у меня был введен неверный формат одной из опций, поэтому она не могла создать папку).

Во-вторых, как @Mark Plotnick указал в четвертом комментарии, и как несколько других упоминалось позже,Мне нужно было добавить начальный ноль к моему набору разрешений в строке с mkdir.

Мораль истории: убедитесь, что вы передали правильную информацию о stdin и получили правильные разрешения.XD

...