/ tmp中的mkdir无法正常工作:“权限被拒绝”

时间:2019-07-04 23:25:41

标签: c++ linux mkdir

我正在尝试编写一个程序来处理应用程序的日志记录。应该将日志写入/tpm/app-name/log.txt。为了做到这一点,我需要在写入之前创建目录app-name,以防它不存在。但是,即使以正确的权限运行该目录,我的代码也不会创建该目录。

我尝试过:  *使用chdir移至/tmp,然后建立app-name目录  *使用root privs运行程序(这不理想,并且由于第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 :(得分:0)

所以我在这里真的很愚蠢,但是我想出了解决自己问题的答案。

首先,我在stdin上传递了错误的信息(程序正在使用此信息来创建正确的文件夹,并且我将其中一个选项的输入格式错误,因此无法创建该文件夹)。

第二,正如@Mark Plotnick在第四条评论中所指出的,以及稍后将要提到的其他几个评论,我需要在我的mkdir行的权限集上添加一个前导零。

故事的寓意:请确保您在stdin上传递正确的信息并获得正确的权限。 XD