如何用open函数覆盖文件而非追加?Linux新手技术求助
文件覆盖写入与open函数说明
实现覆盖写入的方法
你当前的open调用缺少截断文件的标志,导致已有文件内容被保留,写入时看起来像是追加。只需添加O_TRUNC标志即可实现覆盖:
err = open("path/foo.txt", O_RDWR | O_CREAT | O_TRUNC, 0777);
O_TRUNC是POSIX标准规定的标志,当文件已存在且以可写模式打开时,它会将文件长度截为0,后续写入操作就会从文件开头开始,完全覆盖原有内容。
关于open函数与POSIX的说明
open是POSIX标准定义的系统调用,不是特定库或框架,所有符合POSIX规范的类Unix系统(包括Linux)都原生支持它。- 和你熟悉的
fopen对比:fopen是C标准库提供的封装函数,底层依赖open系统调用。比如fopen("path/foo.txt", "w+")的效果,就等价于上面带O_TRUNC的open调用——同样会创建文件(不存在时)、截断已有文件、支持读写操作。
内容的提问来源于stack exchange,提问作者user44055
相关产品推荐
相关产品推荐

