Где tmpfile () хранит файлы, которые создает (в mingw-gcc / windows 7)?

Я тестирую tmpfile () с помощью mingw-gcc (CodeBlocks, latest), и программа работает должным образом: открывает 10 временных файлов, записывает 10 случайных строк, затем считывает эти 10 строк и закрывает каждый * fp.

Как я уже сказал, работает так, как ожидалось, но, прочитав несколько статей о временном расположении на win7, я начал искать, где на самом деле хранятся файлы, перед автоматическим стиранием. В UNIX расположением по умолчанию будет / tmp.

На windows 7 у меня заканчиваются идеи ... - папка программы - пользователь / appdata / local / tmp / - windows / temp

Я не могу найти эти файлы и искал даже с помощью total commander по некоторым известным строкам внутри. Никто. Любая идея?


person user2274696    schedule 10.05.2013    source источник


Ответы (3)


У меня был тот же вопрос, и после просмотра ссылки здесь:

http://sourceforge.net/p/mingw/bugs/666/

... Я думаю, что ребята из MinGW создали специальную версию, которая хранит временный файл полностью в памяти.

Я не знаю, насколько полно их решение, если не изучать исходный код MinGW и / или спрашивать в списках рассылки. В любом случае, вероятно, лучше использовать какую-нибудь функцию, кроме tmpfile (), учитывая ее проблемы.

person Dúthomhas    schedule 22.08.2013

Я использовал Process Explorer для наблюдения за открытыми дескрипторами в этой программе:

#include <stdio.h>
int main(int argc, char *argv[]) {
    int a;
    scanf("%d", &a);
    printf("%p", tmpfile());
    scanf("%d", &a);
    return 0;
}

После выполнения printf("%p", tmpfile()); был открыт новый дескриптор файла, и путь к файлу был C:\Users\sashoalm\AppData\Local\VirtualStore\t9mc. Я снова запустил программу, и на этот раз она была C:\Users\sashoalm\AppData\Local\VirtualStore\t728. Таким образом, он помещает их в C:\Users\sashoalm\AppData\Local\VirtualStore\, а имя представляет собой некоторую случайно сгенерированную строку, начинающуюся с "t".

См. Почему файлы помещаются в C : \ Users \ ‹username› AppData \ Local \ VirtualStore \ Program Files (x86)? о папке "Virtual Store".

person sashoalm    schedule 04.07.2016

/ Я тестировал Dev-C ++ 5.11 (Mngv) gcc и не работал. С Borland 5.5 в Code :: Block проблем нет.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[]) {
    char filename[L_tmpnam];
    char *strs[] = {"Hello\n","Goodbye\n","Cat\n","Dog\n",NULL};
    char **mover = strs;
    char line[80],command[80];
    FILE *fp;

    fp = tmpfile();
    for(; *mover != NULL; mover++) fputs(*mover,fp);
    rewind(fp);
    while(fgets(line,80,fp))printf("%s",line);
    fclose(fp);

    if(tmpnam(filename) == NULL){
        printf("Could not get non-conflicting file name\n");
        exit(EXIT_FAILURE);
    }
    printf("\nFilename obtained is: %s\n\n",filename);
    fp = fopen(filename, "w+");
    for(mover = strs; *mover != NULL; mover++) fputs(*mover, fp);
    rewind(fp);
    while(fgets(line,80,fp)) printf("%s",line);
    putchar('\n');
    fclose(fp);


    return 0;
}
person ahmet    schedule 24.09.2015