December 20, 2005 DOFILEREAD 9

### NAME

dofileread, dofilereadv, dofilewrite, dofilewritev - high-level file operations

### SYNOPSIS

```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

The functions implement the underlying functionality of the read(2), write(2), readv(2), and writev(2) system calls. They are also used throughout the kernel as high-level access routines for file I/O.

The dofileread(``) function attempts to read ```nbytes` of data from the object referenced by file entry ```fp` into the buffer pointed to by ```buf`. The dofilewrite(``) function attempts to write ```nbytes` of data to the object referenced by file entry ```fp` from the buffer pointed to by ```buf`.

The dofilereadv(``) and dofilewritev(``) functions perform 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.

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.

### CODE REFERENCES

This section describes places within the NetBSD source tree where actual code implementing or using these file operations can be found. All pathnames are relative to ```/usr/src`.

The framework for these file operations is implemented within the file ```sys/kern/sys_generic.c`.

### SEE ALSO

file(9)