1.7 KiB
1.7 KiB
Chapter 4 – Advanced File I/O
Scatter/Gather I/O
- Scatter/gather I/O allows reading or writing data to/from multiple buffers in a single system call.
- Uses
readv()andwritev():readv(fd, iov, iovcnt): reads into multiple buffers (iovarray).writev(fd, iov, iovcnt): writes from multiple buffers.
- Improves efficiency by reducing system calls.
Event Poll (select(), poll(), epoll)
- Traditional multiplexing:
select(),poll()(limited scalability). - Linux-specific:
epollfor efficient event notification.epoll_create(): create epoll instance.epoll_ctl(): control interest list (add, modify, remove fds).epoll_wait(): wait for events.
- Edge-triggered vs level-triggered modes.
Memory-Mapped Files (mmap())
- Maps files or devices into memory for direct access.
- System calls:
mmap(),munmap(). - Benefits: faster I/O, shared memory.
- Use
msync()to synchronize changes. - Resizing mappings, changing protections.
- Advisory calls:
posix_fadvise(): give advice about expected I/O patterns.readahead(): prefetch file data.
- Pros and cons of memory mapping.
Asynchronous I/O and I/O Scheduling
- Distinction between synchronous and asynchronous I/O.
- Linux AIO APIs for asynchronous operations.
- I/O schedulers:
- Manage disk request ordering.
- Examples: CFQ, noop, deadline.
- Optimizing I/O performance by choosing schedulers.
- Concepts of disk addressing and request life cycle.
Miscellaneous
ioctl(): device-specific operations.- Zero-copy transfers:
sendfile(),splice().
This chapter covers advanced Linux I/O techniques aimed at improving performance and flexibility in system programming.