gpt4 book ai didi

c - 为什么在这里使用 SEEK_END 不起作用?

转载 作者:太空狗 更新时间:2023-10-29 15:42:03 27 4
gpt4 key购买 nike

所以我正在尝试从大学的片段中学习 C 文件 IO 操作。我的问题是 SEEK_END 没有像我期望的那样工作。

让 met 为您提供更多详细信息:

输入.txt:

abcd-abcd-abcd

代码:

int fd, fdr, l1, l2, wb1, wb2;
char buf[25];

fd = open("input.txt", O_WRONLY);
fdr = open("input.txt", O_RDONLY);

l1 = lseek(fd, -3, SEEK_END);
wb1 = write(fd, "xy", 2);

l2 = lseek(fd, 4, SEEK_SET);
write(fd, "12", 2);

lseek(fdr, 0, SEEK_SET);
wb2 = read(fdr, buf, 20);
write(1, buf, wb2);

我的问题是写“xy”。我希望输出是

abcd12bcd-axyd

反而是

abcd12bcd-abcd

为什么不写“xy”?

最佳答案

在从另一个句柄读取文件之前关闭只写文件(或将数据同步到磁盘)。

在您的情况下,数据已写入文件,但尚未同步到磁盘。因此,当第二个句柄尝试读取数据时,它会获取旧的陈旧数据。

int fd, fdr, l1, l2, wb1, wb2;
char buf[25];

fd = open("input.txt", O_WRONLY);
fdr = open("input.txt", O_RDONLY);

l1 = lseek(fd, -3, SEEK_END);
wb1 = write(fd, "xy", 2);

l2 = lseek(fd, 4, SEEK_SET);
write(fd, "12", 2);

close(fd);

lseek(fdr, 0, SEEK_SET);
wb2 = read(fdr, buf, 20);
write(1, buf, wb2);

关于c - 为什么在这里使用 SEEK_END 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091293/

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