2

write() 实现应该假设随机访问,还是可以有一些假设,比如它们将按顺序执行,并且偏移量增加?

POSIX 或 SUS 规范中描述 VFS 接口的部分的链接将获得额外积分。

4

2 回答 2

4

随机的,肯定的。readwrite接口同时采用大小和偏移量是有原因的。您会注意到结构中没有seek字段fuse_operations;当用户程序在 FUSE 文件上调用seek/lseek时,内核文件描述符中的偏移量会更新,但根本不会通知 FUSE fs。稍后的读取和写入只是开始以不同的偏移量出现在您面前,您应该能够处理它。如果您的实现中的某些东西使它成为不可能,您可能应该返回-EIO您无法满足的写入。

于 2014-07-21T00:29:53.370 回答
3

除非您的 FUSE 文件系统有什么不寻常的地方会阻止打开现有文件进行写入,否则您的写入操作实现必须支持写入任何偏移量——应用程序可以通过lseek()在打开时的文件,例如

fd = open("file", O_WRONLY);

lseek(fd, SEEK_SET, 100);
write(fd, ...);

lseek(fd, SEEK_SET, 0);
write(fd, ...);
于 2014-07-21T00:30:01.190 回答