2014-04-15 10 views
12

Ich versuche, eine Datei wie folgt in Linux zu öffnen. Es wird ein vorhandenes überschreiben, wenn es beendet wird. Das ist was ich will.So öffnen Sie eine Datei, die vorhandenen Inhalt überschreiben

fout = open(out_file_name, O_WRONLY | O_CREAT, 644); 

Wenn jedoch das vorhandene 1024 Byte ist, wenn ich in der oben genannten Weise öffne und 800 neue Bytes schreibe. Ich sehe immer noch die 224 Bytes am Ende des vorherigen Inhalts.

Wie kann ich es nur die 800 Bytes haben, die ich geschrieben habe?

+3

Sie suchen nach dem 'O_TRUNC' Flag zu' open() '. –

+0

Sie wollen wahrscheinlich nicht Modus 644. Vielleicht wollen Sie Modus 0644. Aber sehen Sie Ciro Kommentar zu den symbolischen Namen S_xxUSR und so weiter unten. –

Antwort

9

Sie wollen die O_TRUNC Flagge open() verwenden, durch OR-ing mit den vorhandenen Flags, die Sie oben haben:

int fout = open(out_file_name, O_WRONLY | O_CREAT | O_TRUNC, 644); 

Dadurch wird die Datei abgeschnitten. Im Folgenden finden Sie die Informationen in der Manpage für open (2).

O_TRUNC 
      If the file already exists and is a regular file and the open 
      mode allows writing (i.e., is O_RDWR or O_WRONLY) it will be 
      truncated to length 0. If the file is a FIFO or terminal device 
      file, the O_TRUNC flag is ignored. Otherwise the effect of 
      O_TRUNC is unspecified. 
+1

Verwenden Sie 'S_IRUSR | S_IWUSR' usw. von 'man 2 chmod' statt' 644' ;-) –

Verwandte Themen