2016-04-29 1 views
0

Ich erstelle eine Datei in einem c wie folgt:node.js geöffnete Datei überschreibt vorhandene Datei

int fd; 
fd = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); 

if (fd == -1) { 
    return NULL; 
} 

lseek(fd, filesize + 1, SEEK_SET); 

write(fd, "", 1); 

lseek(fd, 0, SEEK_SET); 

void* file_memory = mmap(0, filesize, PROT_WRITE, MAP_SHARED, fd, 0); 

close(fd); 

Also, wie gesagt, erstelle ich die Datei und füllen Sie ihn, bevor sie im Speicher abbildet.

Wenn ich an der Datei im Dateisystem aussehen es gibt mir 1026 Bytes Dateigröße (einfache ls -l aus der Datei)

Später habe ich die Datei von einem Knoten Anwendung einfach und klingen wie so zugreifen möchten:

Wenn diese Zeile ausgeführt wird, wird die Dateigröße auf 0 gesetzt (wieder ein einfaches ls -l).

Ich nehme an, dass die Datei neu erstellt wurde? Aber das sollte nicht passieren, da die Datei bereits existiert (gemäß dem Handbuch node.js).

Was passiert hier? Was mache ich falsch?

Antwort

0

Wenn ich das 'w +' Flag verwende, funktioniert es.

Ich weiß nicht warum, weil 'w +' bedeutet, dass es die Datei lesen und schreiben kann, während 'w' bedeutet, dass es nur die Datei schreiben kann.

fs.open (Dateiname, 'w', function (err, fd) {...}

EDIT

Von man fopen

w

Truncate-Datei null Länge oder erstellen Sie eine Textdatei zum Schreiben Der Stream wird am Anfang der Datei positioniert

w +

Öffnen zum Lesen und Schreiben. Die Datei wird erstellt, wenn sie nicht existiert, andernfalls wird sie abgeschnitten. Der Stream befindet sich am Anfang der Datei.

0

Sie haben Recht, das w Flag erstellt die Datei neu. Wenn Sie am Ende der Datei schreiben möchten, verwenden Sie das Flag a (append).