write() 实现应该假设随机访问,还是可以有一些假设,比如它们将按顺序执行,并且偏移量增加?
POSIX 或 SUS 规范中描述 VFS 接口的部分的链接将获得额外积分。
随机的,肯定的。read
和write
接口同时采用大小和偏移量是有原因的。您会注意到结构中没有seek
字段fuse_operations
;当用户程序在 FUSE 文件上调用seek
/lseek
时,内核文件描述符中的偏移量会更新,但根本不会通知 FUSE fs。稍后的读取和写入只是开始以不同的偏移量出现在您面前,您应该能够处理它。如果您的实现中的某些东西使它成为不可能,您可能应该返回-EIO
您无法满足的写入。
除非您的 FUSE 文件系统有什么不寻常的地方会阻止打开现有文件进行写入,否则您的写入操作实现必须支持写入任何偏移量——应用程序可以通过lseek()
在打开时的文件,例如
fd = open("file", O_WRONLY);
lseek(fd, SEEK_SET, 100);
write(fd, ...);
lseek(fd, SEEK_SET, 0);
write(fd, ...);