在xv6中实现lseek

时间:2019-06-06 16:05:54

标签: c fcntl xv6 lseek

首先,我需要说我完全有可能遗漏某些东西。 我的任务是实质上实现“ fprintf”。现在虽然不需要附加到文件,但我想超越。 我的问题是,我无法在xv6中找到lseek的定义,这意味着我必须自己实现它,但是我真的不知道该怎么做。

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

我也尝试过在无限循环中写一个空字符串。知道这行不通,但还是尝试了。

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

它不一定是真正的lseek。我只需要能够达到fd的结尾并继续写入即可,但这不能依赖于filemode。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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