C 如何打开覆盖现有内容的文件

C 如何打开覆盖现有内容的文件,c,linux,C,Linux,我尝试在linux中打开这样的文件。如果退出,它将重写现有的。这就是我想要的 fout = open(out_file_name, O_WRONLY | O_CREAT, 644); 但是,如果现有的是1024字节,当我以上述方式打开并写入800个新字节时。 我仍然看到前面内容末尾的224字节 如何使其仅具有我已写入的800字节?您想使用O_TRUNC标志来open(),或者将其与上面的现有标志一起使用: int fout = open(out_file_name, O_WRONLY | O_

我尝试在linux中打开这样的文件。如果退出,它将重写现有的。这就是我想要的

fout = open(out_file_name, O_WRONLY | O_CREAT, 644);
但是,如果现有的是1024字节,当我以上述方式打开并写入800个新字节时。 我仍然看到前面内容末尾的224字节


如何使其仅具有我已写入的800字节?

您想使用
O_TRUNC
标志来
open()
,或者将其与上面的现有标志一起使用:

int fout = open(out_file_name, O_WRONLY | O_CREAT | O_TRUNC, 644);
这将截断该文件。以下是open(2)手册页中的信息


您正在寻找
O_-TRUNC
标志以
open()
。您可能不需要模式644。也许你需要0644模式。但请参见下面西罗对符号名s|xxUSR等的评论。使用
s|IRUSR | s|u IWUSR
等,而不是
644
;-)O_TRUNC到底做什么?我从主页上看不懂。你从描述中看不懂什么?我不知道如何使它更清晰或不那么模棱两可。根据我的理解,你引用的手册页暗示了未指定的行为,如果文件已经存在。但似乎有效。这是洁食吗?我确实在手册的末尾看到,
creat()相当于open(),其标志等同于O|u creat | O|u WRONLY | O|TRUNC。
所以我猜这是允许的。
   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.