[英]Overwrite a file instead of appending to it?
我是一名新手 linux 程序员,被要求成为我同事的一名程序员。
我用这一行打开了一个文件:
err = open("path/foo.txt", O_RDWR | O_CREAT,0777);
现在我写入它,并十六进制转储文件,output 显示我附加了新内容而不是覆盖原始内容。
我该如何覆盖?
另外,如果您问我“什么是“开放的”? 我会参考新手辩护并说我不知道。 我知道的最接近的事情是 fopen,但我不知道我的同事正在使用什么库/框架。 可能是posix?
如果你通过man 2 open
open(2)
的手册,你会发现一个接受标志的列表。
无论如何,您都应该阅读手册页,这并不难,您唯一需要记住的是,您可以通过按/
来搜索关键字, n
/ N
用于在找到的内容之间跳转,而q
则在您退出时退出重新完成,其他一切都是多余的,可能只会加快一点速度。
您正在寻找的标志是
O_TRUNC
If the file already exists and is a regular file and the access 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.
所以你所要做的就是在你想完全覆盖文件时添加这个标志。
但是如果可以的话,你应该使用fopen(3)
,在这种情况下你正在寻找的mode
是w+
,它相当于O_RDWR | O_CREAT | O_TRUNC
O_RDWR | O_CREAT | O_TRUNC
O_RDWR | O_CREAT | O_TRUNC
在open(2)
中。
open(2)
是一个低级系统调用,有效且正确地从原始文件描述符中读取并不是那么简单,另一方面,您从fread(3)
获得的FILE*
是一种实现,可以处理大部分细节,例如为您缓冲,除非你能做得更好,否则你不应该回避它。
顺便说一句,很少需要0777
文件权限并且不适用于常规文件,我建议您使用0666
打开普通文本文件,它可以满足您的所有需求,但不能使其作为程序执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.