C 在xv6中实现lseek

C 在xv6中实现lseek,c,fcntl,xv6,lseek,C,Fcntl,Xv6,Lseek,首先我要说的是,我完全有可能遗漏了什么。 我的任务是实现“fprintf”。现在,虽然不需要附加到文件,但我喜欢更进一步。 我的问题是,我在xv6中找不到lseek的定义,这意味着我必须自己实现它,但我真的不知道如何实现它 尝试在无限循环中一次读取512字节,尝试将光标移到末尾,作为硬编码的一种方式,但如果文件未使用O_RDWR打开,或者我尝试使用stdout打开,则会失败 我还尝试在无限循环中写入空字符串。我知道这行不通,但还是试过了 我可以很好地阅读xv6(用户级程序),但我一生都无法理解l

首先我要说的是,我完全有可能遗漏了什么。 我的任务是实现“fprintf”。现在,虽然不需要附加到文件,但我喜欢更进一步。 我的问题是,我在xv6中找不到lseek的定义,这意味着我必须自己实现它,但我真的不知道如何实现它

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

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

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

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

非常感谢您的帮助。

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

为什么
fprintf
需要搜索?@melpomene我正在尝试让附加模式(“a”)正常工作
fprintf
不需要关心模式<代码>“a”应该在
fopen
中实现(只需将
O_APPEND
传递到
open
)。@melpomene既然您提到了它。。。我已将O_APPEND传递到open()。我在sys_open的定义名称“off”中发现了一些东西,所以我认为这是偏移量。伊玛把它弄得乱七八糟,看看我能不能让你继续工作。谢谢