gpt4 book ai didi

c - 使用 O_TRUNC 重写文件

转载 作者:行者123 更新时间:2023-11-30 15:23:47 27 4
gpt4 key购买 nike

我需要将二进制文件的内容读入缓冲区,在该缓冲区上执行操作,而不是使用输出缓冲区重写同一文件的内容。

#include <fcntl.h>
#define BUFFSIZE 1024
char in[BUFFSIZE],
out[BUFFSIZE];

void main(char argc, char **argv)
{
int file = open(argv[1], O_RDONLY);
int size = read(file, in, BUFFSIZE);
hash(in, out, size);
close(file);
file = open(argv[1], O_WRONLY, O_TRUNC);
write(file, out, size);
close(file);
}

如果我使用O_RDWR 打开文件,然后使用write(),我的输出缓冲区将附加到文件末尾。如果我使用 O_TRUNC 关闭并重新打开文件,它不会截断它 - 输出缓冲区小于输入,因此可以在文件末尾看到旧内容的剩余部分。另一方面,使用 O_WRONLY 会创建一个我无权写入的文件。我知道如何使用 fopen()fprintf() 来做到这一点,但我想避免这种情况,并且,如果可能的话,避免不必要的关闭(使用某种倒带)。

最佳答案

将第二次公开征集更改为

file = open(argv[1], O_WRONLY | O_TRUNC);

我想你会得到你想要的。

顺便说一句,您应该检查打开、读取、写入和关闭等操作的返回结果。

关于c - 使用 O_TRUNC 重写文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652446/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com