Dustin Oprea
Dustin Oprea

Reputation: 10236

FUSE's write sequence guarantees

Should write() implementations assume random-access, or can there be some assumptions, like that they'll ever be performed sequentially, and at increasing offsets?

You'll get extra points for a link to the part of a POSIX or SUS specification that describes the VFS interface.

Upvotes: 2

Views: 891

Answers (2)

user149341
user149341

Reputation:

Unless there is something unusual about your FUSE filesystem that would prevent an existing file from being opened for write, your implementation of the write operation must support writes to any offset — an application can write to any location in a file by lseek()-ing around in the file while it's open, e.g.

fd = open("file", O_WRONLY);

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

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

Upvotes: 3

hobbs
hobbs

Reputation: 239652

Random, for certain. There's a reason why the read and write interfaces take both size and offset. You'll notice that there isn't a seek field in the fuse_operations struct; when a user program calls seek/lseek on a FUSE file, the offset in the kernel file descriptor is updated, but the FUSE fs isn't notified at all. Later reads and writes just start coming to you with a different offset, and you should be able to handle that. If something about your implementation makes it impossible, you should probably return -EIO on the writes you can't satisfy.

Upvotes: 4

Related Questions