2016-12-17 1 views
2

Ich versuche, eine temporäre Datei zu machen, zu der ich eine Menge Zeug schreiben will, und dann ausdrucken nach Erhalt eines Signals. Nach einigen Diagnosen mit lsof sieht es jedoch so aus, als ob die temporäre Datei sofort nach dem Öffnen gelöscht wird. Nehmen Sie das folgende Code-Schnipsel:C: Temp Datei sofort nach dem Öffnen gelöscht

FILE *tmp; 

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

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

    sleep(60); 

Nun, wenn ich eine ps aux gehen tun, die pid meines Verfahrens, und dann ein lsof -p <pid> tun, sehe ich folgendes:

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

Dies ist ein bisschen ein Kopfkratzer für mich. Wenn man bedenkt, dass es wirklich nur einen einzigen eingebauten Funktionsaufruf gibt, der beim Aufruf keinen Fehler verursacht, bin ich mir nicht sicher, was das Problem ist.

+2

Aus der Manpage: * „Die erstellte Datei ist unlinked vor tmpfile() zurückkehrt, um die Datei zu verursachen automatisch gelöscht werden, wenn der letzte Verweis auf sie geschlossen ist.“ * – user3386109

+0

und „* letzte Verweis darauf ist closed "" wenn 'fclose (tmp);' aufgerufen wird. – alk

+1

Ich sollte es trotzdem lesen und schreiben können. Das Aufheben der Verknüpfung bedeutet nur, dass der auf den Inode zeigende Pfad entfernt wird, das aktuelle Dateihandle 'FILE * tmp' sollte immer noch gültig sein, bis, wie @alk sagte, entweder' fclose' aufgerufen wird oder das Programm beendet wird. –

Antwort

3

Aus der Manpage:

Die erstellte Datei wird nicht verknüpft, bevor tmpfile() zurückkehrt, wodurch die Datei automatisch gelöscht werden, wenn der letzte Verweis darauf ist geschlossen.

Die Ausgabe von lsof zeigt einfach an, dass der Pfad zum Inode entfernt wurde. Das aktuelle Dateihandle FILE *tmp sollte jedoch noch gültig sein, bis die Datei geschlossen ist oder das Programm beendet wird.

Verwandte Themen