2

首先,我需要说我完全有可能遗漏了一些东西。我的任务是实质上实现'fprintf'。现在虽然不需要附加到文件,但我喜欢超越。我的问题是,我在 xv6 中找不到 lseek 的定义,这意味着我必须自己实现它,但我真的不知道如何去做。

尝试在无限循环中一次读取 512 个字节,以尝试将光标移到末尾,作为对其进行硬编码的一种方式,但如果文件未使用 O_RDWR 打开或我使用 stdout 尝试此操作,则会失败。

我也试过在无限循环上写一个空字符串。明知道行不通,还是试了一下。

我可以很好地阅读 xv6(用户级程序),但我一生都无法理解 lseek 的源代码

它不一定是真正的 lseek。我只需要能够到达 fd 的末尾并继续写入,但这不能依赖于文件模式。

任何帮助是极大的赞赏。

4

1 回答 1

1

我找到了解决方案。O_APPEND 不起作用的原因是 sysfile.c 中 open() 的定义对 append 没有任何作用。在 sys_open 中,他们将 f->off(偏移)的值硬编码为 0,这是我需要更改的。我计划的解决方案是找出文件的文件大小(以字节为单位),并将偏移量设置为该数字。可能会使用stat()。

于 2019-06-06T16:59:45.707 回答