DOFILEREAD(9)

πŸ“¦ version 11.0, in nixpkgs unstable

🌸 NAME 🌸

okay bestie, welcome to the DOFILEREAD(9) page from the Kernel Developer's Manual πŸ’…

dofileread, dofilereadv, dofilewrite, dofilewritev β€” high-level file operations ✨


✨ SYNOPSIS ✨

here’s the whole squad’s signatures, copied exactly because we do not play with code πŸ’…

#include <sys/file.h>

int
dofileread(struct lwp *l, int fd, struct file *fp, void *buf,
    size_t nbyte, off_t *offset, int flags, register_t *retval);

int
dofilewrite(struct lwp *l, int fd, struct file *fp, const void *buf,
    size_t nbyte, off_t *offset, int flags, register_t *retval);

int
dofilereadv(struct lwp *l, int fd, struct file *fp,
    const struct iovec *iovp, int iovcnt, off_t *offset, int flags,
    register_t *retval);

int
dofilewritev(struct lwp *l, int fd, struct file *fp,
    const struct iovec *iovp, int iovcnt, off_t *offset, int flags,
    register_t *retval);

πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so these functions are the underlying functionality of the read(2), write(2), readv(2), and writev(2) system calls. They’re also used all over the kernel as high-level access routines for file I/O β€” main character energy fr fr πŸ‘‘

  • dofileread() β€” tries to read nbyte bytes of data from the object referenced by file entry fp into the buffer pointed to by buf. (The OG prose says nbytes; the synopsis says nbyte. Same vibe, bestie 😭)
  • dofilewrite() β€” tries to write nbyte bytes of data to the object referenced by file entry fp from the buffer pointed to by buf.
  • dofilereadv() and dofilewritev() β€” do the same operations, but scatter the data with the iovcnt buffers specified by the members of the iov array.

The offset of the file operations is explicitly specified by *offset. The new file offset after the file operation is returned in *offset. If the FOF_UPDATE_OFFSET flag is specified in the flags argument, the file offset in the file entry fp is updated to reflect the new file offset; otherwise it remains unchanged after the operation. πŸ”₯

The file descriptor fd is largely unused except for use by the ktrace framework for reporting to userlevel the process's file descriptor. Like, it’s there, but mostly for the vibes and ktrace 🫢

Upon successful completion the number of bytes which were transferred is returned in *retval. πŸ’–


🌈 RETURN VALUES 🌈

Upon successful completion zero is returned, otherwise an appropriate error is returned. That’s it, that’s the tea β€” slay β˜•βœ¨


πŸŽ€ CODE REFERENCES πŸŽ€

The framework for these file operations is implemented within the file sys/kern/sys_generic.c. Go look if you’re nosy, bestie πŸ”


🌸 SEE ALSO 🌸


kisses and sparkles πŸ’– β€” sourced from Debian, dated December 20, 2005, and this is the DOFILEREAD(9) page 🫢

πŸ“¦ where this page comes from