diff --git a/headers/posix/sys/uio.h b/headers/posix/sys/uio.h new file mode 100644 index 0000000000..7a7baafad7 --- /dev/null +++ b/headers/posix/sys/uio.h @@ -0,0 +1,41 @@ +/* uio.h */ + +#ifndef _SYS_UIO_H +#define _SYS_UIO_H + +#include + +typedef struct iovec { + void *iov_base; + size_t iov_len; +} iovec; + + +#ifdef _KERNEL_MODE +enum uio_rw { UIO_READ, UIO_WRITE }; + +/* Segment flag values. */ +enum uio_seg { + UIO_USERSPACE, /* from user data space */ + UIO_SYSSPACE /* from system space */ +}; + +struct uio { + struct iovec *uio_iov; /* pointer to array of iovecs */ + int uio_iovcnt; /* number of iovecs in array */ + off_t uio_offset; /* offset into file this uio corresponds to */ + size_t uio_resid; /* residual i/o count */ + enum uio_seg uio_segflg; /* see above */ + enum uio_rw uio_rw; /* see above */ +// struct proc *uio_procp; /* process if UIO_USERSPACE */ +}; + +int uiomove(char *cp, int n, struct uio *uio); +#endif + +ssize_t readv(int fd, const struct iovec *vector, size_t count); +ssize_t readv_pos(int fd, off_t pos, const struct iovec *vec, size_t count); +ssize_t writev(int fd, const struct iovec *vector, size_t count); +ssize_t writev_pos(int fd, off_t pos, const struct iovec *vec, size_t count); + +#endif /* _SYS_UIO_H */