2014-04-15 14 views
12

Tôi cố mở một tệp như thế này trong linux. Nó sẽ ghi đè lên hiện tại nếu thoát. Đó là thứ mà tôi muốn.Cách mở tệp ghi đè nội dung hiện có

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

Tuy nhiên, nếu hiện tại là 1024 byte, khi tôi mở theo cách trên và viết 800 byte mới. Tôi vẫn thấy 224 byte ở cuối nội dung trước đó.

Làm cách nào để tôi có thể tạo 800 byte mà tôi đã viết?

+3

Bạn đang tìm cờ 'O_TRUNC' để' mở() '. –

+0

Bạn có thể không muốn chế độ 644. Có lẽ bạn muốn chế độ 0644. Nhưng hãy xem nhận xét của Ciro về các tên tượng trưng S_xxUSR và cứ như dưới đây. –

Trả lời

9

Bạn muốn sử dụng O_TRUNC cờ để open(), bởi OR-ing nó với những lá cờ hiện tại bạn có trên:

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

này sẽ cắt file. Dưới đây là thông tin trong trang hướng dẫn mở (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

Sử dụng 'S_IRUSR | S_IWUSR', v.v. từ 'man 2 chmod' thay vì' 644' ;-) –

Các vấn đề liên quan