2014-04-15 11 views
12

Próbuję otworzyć taki plik w systemie Linux. Jeśli zakończy, nadpisze istniejący. To jest to czego chcę.Jak otworzyć plik, który nadpisuje istniejącą zawartość?

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

Jednak jeśli istniejący jest 1024 bajty, kiedy otworzę w powyższy sposób i napiszę 800 nowych bajtów. Nadal widzę 224 bajty na końcu poprzedniej zawartości.

Jak mogę sprawić, by było po prostu 800 bajtów, które napisałem?

+3

Poszukujesz flagi 'O_TRUNC' na' open() '. –

+0

Prawdopodobnie nie chcesz trybu 644. Być może chcesz trybu 0644. Ale zobacz komentarz Ciro na temat symbolicznych nazw S_xxUSR i tak dalej poniżej. –

Odpowiedz

9

chcesz użyć flagi O_TRUNC do open() przez OR-ing go z istniejącymi flagami masz powyżej:

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

to obetnie plik. Poniżej znajduje się informacja na stronie podręcznika 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

Użyj 'S_IRUSR | S_IWUSR', itp. Z 'man 2 chmod' zamiast' 644' ;-) –

Powiązane problemy