所以我正在尝试从大学的片段中学习C文件IO操作。我的问题是SEEK_END
不能正常工作,因为我希望它能够正常工作。
让我们见面给你更多细节:
input.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”?
答案 0 :(得分:0)
在从另一个句柄读取文件之前,关闭只写文件(或将数据同步到磁盘)。
在您的情况下,数据将写入文件,但尚未同步到磁盘。因此,当第二个句柄尝试读取数据时,它会获得旧的陈旧数据。
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);
答案 1 :(得分:0)
您需要先将数据同步到磁盘,然后再重新读取。因为在您阅读时不会写入数据。你需要在阅读之前关闭文件。