Как создать станд.:: ofstream во временный файл?

Нет, вы не можете иметь общий «eval» в Java (или любой скомпилированный язык). Если вы не захотите написать компилятор Java и JVM для выполнения внутри вашей Java-программы.

Да, у вас может быть библиотека для оценки числовых алгебраических выражений, таких как выше - см. эту тему для обсуждения .

36
задан MSalters 2 February 2009 в 19:51
поделиться

2 ответа

Я думаю, что это должно работать:

    char *tmpname = strdup("/tmp/tmpfileXXXXXX");
    ofstream f;
    int fd = mkstemp(tmpname);
    f.attach(fd);

РЕДАКТИРОВАНИЕ: ну, это не могло бы быть портативно. Если Вы не можете использовать присоединение и не можете создать ofstream непосредственно из дескриптора файла, то необходимо сделать это:

char *tmpname = strdup("/tmp/tmpfileXXXXXX");
mkstemp(tmpname);
ofstream f(tmpname);

Как mkstemp уже создает файл для Вас, состояние состязания не должно быть проблемой здесь.

11
ответ дан f3lix 23 September 2019 в 23:08
поделиться

Я сделал эту функцию:

#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <vector>

std::string open_temp(std::string path, std::ofstream& f) {
    path += "/XXXXXX";
    std::vector<char> dst_path(path.begin(), path.end());
    dst_path.push_back('\0');

    int fd = mkstemp(&dst_path[0]);
    if(fd != -1) {
        path.assign(dst_path.begin(), dst_path.end() - 1);
        f.open(path.c_str(), 
               std::ios_base::trunc | std::ios_base::out);
        close(fd);
    }
    return path;
}

int main() {
    std::ofstream logfile;
    open_temp("/tmp", logfile);
    if(logfile.is_open()) {
        logfile << "hello, dude" << std::endl;
    }
}

необходимо, вероятно, удостовериться, что назвали umask с надлежащей маской создания файла (я предпочел бы 0600) - в странице справочника для mkstemp говорится, что маска создания режима файла не стандартизирована. Это использует то, что mkstemp изменяет свой аргумент имени файла, что это использует. Так, мы открываем его и закрываем файл, который это открыло (так, чтобы не открыть его дважды), будучи оставленным с ofstream, который подключен к тому файлу.

16
ответ дан Johannes Schaub - litb 23 September 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: