Desktop operating systems provide powerful abstractions for moving data between software components. In POSIX systems, this is commonly achieved using file descriptors together with read() and write() operations.
For example:
- a generator writes data to a file descriptor,
- while a consumer reads data from it.