---
name: "q_push"
section: "3"
platform: "linux"
package: "liblibrecast-dev"
version: "0.9.1-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/q_push"
---

# q\_push(3)

push a job onto a smolq queue

## NAME

q\_push - push a job onto a smolq queue

## LIBRARY

Librecast library (*liblibrecast*, *-llibrecast*)

## SYNOPSIS

```
#include <librecast/q.h>
```

**int  q\_push(q\_t** *\*q***, void \*(\****f***)(void \*), void \*restrict** *arg***);** **int  q\_trypush(q\_t** *\*q***, void \*(\****f***)(void \*), void \*restrict** *arg***);**

Compile and link with *-llibrecast*.

## DESCRIPTION

**q\_push**() pushes *f* onto the queue *q* with argument *arg.*

**q\_trypush**() is the same as **q\_push**() except that if the queue writer lock cannot be immediately obtained, then the call returns an error (*errno* set to **EAGAIN**) instead of blocking.

## RETURN VALUE

The **q\_push**() function returns zero on success. On error, -1 is returned and *errno* is set to indicate the error.

## ERRORS

- **EAGAIN**

  ( **q\_trypush**()) The operation could not be performed without blocking. (i.e., the queue was full).

The function can also fail with the errors for [**sem\_post**(3)](/sem_post/3.md) or [**sem\_wait**(3)](/sem_wait/3.md).

## SEE ALSO

[**q\_job\_seek**(3)](/q_job_seek/3.md), [**q\_pool\_create**(3)](/q_pool_create/3.md), [**q\_pool\_destroy**(3)](/q_pool_destroy/3.md), [**q\_init**(3)](/q_init/3.md), [**q\_free**(3)](/q_free/3.md), [**q\_wait**(3)](/q_wait/3.md), [**sem\_post**(3)](/sem_post/3.md), [**sem\_wait**(3)](/sem_wait/3.md)
