blob: 5d1be8a1f8509a2abbcb07455f03f81c4aa9a274 [file] [log] [blame] [view]
# zx_fifo_create
## NAME
<!-- Updated by update-docs-from-fidl, do not edit. -->
Create a fifo.
## SYNOPSIS
<!-- Updated by update-docs-from-fidl, do not edit. -->
```c
#include <zircon/syscalls.h>
zx_status_t zx_fifo_create(size_t elem_count,
size_t elem_size,
uint32_t options,
zx_handle_t* out0,
zx_handle_t* out1);
```
## DESCRIPTION
`zx_fifo_create()` creates a fifo, which is actually a pair of fifos
of *elem_count* entries of *elem_size* bytes. Two endpoints are
returned. Writing to one endpoint enqueues an element into the fifo
that the opposing endpoint reads from.
Fifos are intended to be the control plane for shared memory transports.
Their read and write operations are more efficient than *sockets* or
*channels*, but there are severe restrictions on the size of elements
and buffers.
The *elem_count* must be a power of two. The total size of each fifo
(`elem_count * elem_size`) may not exceed 4096 bytes.
The *options* argument must be 0.
## RIGHTS
<!-- Updated by update-docs-from-fidl, do not edit. -->
TODO(ZX-2399)
## RETURN VALUE
`zx_fifo_create()` returns **ZX_OK** on success. In the event of
failure, one of the following values is returned.
## ERRORS
**ZX_ERR_INVALID_ARGS** *out0* or *out1* is an invalid pointer or NULL or
*options* is any value other than 0.
**ZX_ERR_OUT_OF_RANGE** *elem_count* or *elem_size* is zero, or *elem_count*
is not a power of two, or *elem_count* * *elem_size* is greater than 4096.
**ZX_ERR_NO_MEMORY** Failure due to lack of memory.
There is no good way for userspace to handle this (unlikely) error.
In a future build this error will no longer occur.
## SEE ALSO
- [`zx_fifo_read()`]
- [`zx_fifo_write()`]
<!-- References updated by update-docs-from-fidl, do not edit. -->
[`zx_fifo_read()`]: fifo_read.md
[`zx_fifo_write()`]: fifo_write.md