### Function

# GLib unix_open_pipe

since: 2.30

#### Declaration

    gboolean
    g_unix_open_pipe (
      gint* fds,
      gint flags,
      GError** error
    )

#### Description

Similar to the UNIX `pipe()` call, but on modern systems like Linux uses the `pipe2()` system call, which atomically creates a pipe with the configured flags.

As of GLib 2.78, the supported flags are `O_CLOEXEC`/`FD_CLOEXEC` (see below) and `O_NONBLOCK`. Prior to GLib 2.78, only `FD_CLOEXEC` was supported — if you wanted to configure `O_NONBLOCK` then that had to be done separately with `fcntl()`.

Since GLib 2.80, the constants `G_UNIX_PIPE_END_READ` and `G_UNIX_PIPE_END_WRITE` can be used as mnemonic indexes in `fds`.

It is a programmer error to call this function with unsupported flags, and a critical warning will be raised.

As of GLib 2.78, it is preferred to pass `O_CLOEXEC` in, rather than `FD_CLOEXEC`, as that matches the underlying `pipe()` API more closely. Prior to 2.78, only `FD_CLOEXEC` was supported. Support for `FD_CLOEXEC` may be deprecated and removed in future.

Available since: 2.30

#### Parameters

`fds`

  Type: An array of `gint`

  Array of two integers.

  The array must have 2 elements.
  The data is owned by the caller of the function.

`flags`

  Type: `gint`

  Bitfield of file descriptor flags, as for `fcntl()`

`error`

  Type: `GError **`

  The return location for a recoverable error.

  The argument can be `NULL`.
  If the return location is not `NULL`, then you must initialize it to a `NULL` `GError*`.
  The argument will be left initialized to `NULL` by the function if there are no errors.
  In case of error, the argument will be set to a newly allocated `GError`; the caller will take ownership of the data, and be responsible for freeing it.

#### Return value

Type: `gboolean`

`TRUE` on success, `FALSE` if not (and errno will be set).