Я пытаюсь создать временный файл, в который я хочу написать кучу вещей, а затем распечатать его после получения сигнала. Однако после некоторой диагностики с 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)
Это немного головной уборщик для меня. Учитывая, что это действительно только один встроенный вызов функции, который не вызывает ошибку при вызове, я не уверен, в чем проблема.
От человека странице: * «Созданный файл несвязанными перед тем tmpfile() возвращает, в результате чего файл будет автоматически удаляется, когда последняя ссылка на него закрыт.» * – user3386109
И «* последняя ссылка на него closed * ", когда вызывается' fclose (tmp); '. – alk
Я все равно мог читать и писать. Unlinking просто означает, что путь, указывающий на inode, удаляется, текущий дескриптор файла 'FILE * tmp' должен оставаться в силе до тех пор, пока, как сказал @alk, я не вызову' fclose' или программа не выйдет. –