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.
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
und „* letzte Verweis darauf ist closed "" wenn 'fclose (tmp);' aufgerufen wird. – alk
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. –