Glenn Kasten | ba8da29 | 2012-08-29 12:25:28 -0700 | [diff] [blame] | 1 | libnbaio (for "Non-Blocking Audio I/O") was originally intended to |
| 2 | be a purely non-blocking API. It has evolved to now include |
| 3 | a few blocking implementations of the interface. |
| 4 | |
| 5 | Note: as used here, "short transfer count" means the return value for |
| 6 | read() or write() that indicates the actual number of successfully |
| 7 | transferred frames is less than the requested number of frames. |
| 8 | |
| 9 | Pipe |
| 10 | ---- |
| 11 | supports 1 writer and N readers |
| 12 | |
| 13 | no mutexes, so safe to use between SCHED_NORMAL and SCHED_FIFO threads |
| 14 | |
| 15 | writes: |
| 16 | non-blocking |
| 17 | never return a short transfer count |
| 18 | overwrite data if not consumed quickly enough |
| 19 | |
| 20 | reads: |
| 21 | non-blocking |
| 22 | return a short transfer count if not enough data |
| 23 | will lose data if reader doesn't keep up |
| 24 | |
| 25 | MonoPipe |
| 26 | -------- |
| 27 | supports 1 writer and 1 reader |
| 28 | |
| 29 | no mutexes, so safe to use between SCHED_NORMAL and SCHED_FIFO threads |
| 30 | |
| 31 | write are optionally blocking: |
| 32 | if configured to block, then will wait until space available before returning |
| 33 | if configured to not block, then will return a short transfer count |
| 34 | and will never overwrite data |
| 35 | |
| 36 | reads: |
| 37 | non-blocking |
| 38 | return a short transfer count if not enough data |
| 39 | never lose data |
| 40 | |