2016-12-17 6 views
2

Я пытаюсь создать временный файл, в который я хочу написать кучу вещей, а затем распечатать его после получения сигнала. Однако после некоторой диагностики с lsof это выглядит так, что временный файл удаляется сразу после его открытия. Рассмотрим следующий фрагмент кода:C: файл Temp удален сразу после открытия

FILE *tmp; 

int main(int argc, char *argv[]) { 

    if ((tmp = tmpfile()) == NULL) 
     err_sys("tmpfile error"); 

    sleep(60); 

Теперь, если я иду сделать ps aux, получить идентификатор процесса моего процесса, а затем сделать lsof -p <pid>, я вижу следующее:

10.06 1159 daniel 3u REG 0,1  0 10696049115128289 /tmp/tmpfCrM7Jn (deleted) 

Это немного головной уборщик для меня. Учитывая, что это действительно только один встроенный вызов функции, который не вызывает ошибку при вызове, я не уверен, в чем проблема.

+2

От человека странице: * «Созданный файл несвязанными перед тем tmpfile() возвращает, в результате чего файл будет автоматически удаляется, когда последняя ссылка на него закрыт.» * – user3386109

+0

И «* последняя ссылка на него closed * ", когда вызывается' fclose (tmp); '. – alk

+1

Я все равно мог читать и писать. Unlinking просто означает, что путь, указывающий на inode, удаляется, текущий дескриптор файла 'FILE * tmp' должен оставаться в силе до тех пор, пока, как сказал @alk, я не вызову' fclose' или программа не выйдет. –

ответ

3

От человека странице:

Созданный файл несвязанными перед тем tmpfile() возвращает, в результате чего файл быть автоматически удаляется, когда последняя ссылка на него закрыт.

Выходной сигнал lsof просто указывает, что путь, указывающий на индекс, был удален. Однако текущий дескриптор файла FILE *tmp должен оставаться в силе, пока файл не будет закрыт или программа не выйдет.

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

  • Нет связанных вопросов^_^