---
name: "filter_create_fd"
section: "3"
platform: "linux"
package: "clearsilver-dev"
version: "0.10.5-6+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/filter_create_fd"
---

# filter\_create\_fd(3)

Create a sub process and return the requested pipes

## NAME

filter\_create\_fd  - Create a sub process and return the requested pipes

## SYNOPSIS

```
#include <util/filter.h>
```

```
NEOERR *filter_create_fd(const char *cmd, int *fdin, int *fdout, int *fderr,
                         pid_t *pid);
```

## ARGUMENTS

cmd -\> the sub command to execute.  Will be executed with\
 /bin/sh -c\
 fdin -\> pointer to return the stdin pipe, or NULL if you don't\
 want the stdin pipe\
 fdout -\> pointer to return the stdout pipe, or NULL if you don't\
 want the stdout pipe\
 fderr -\> pointer to return the stderr pipe, or NULL if you don't\
 want the stderr pipe

## DESCRIPTION

filter\_create\_fd and filter\_create\_fp are what popen

been: a mechanism to create sub processes and have pipes to all their input/output.  The concept was taken from mutt, though python has something similar with popen3/popen4.  You control which pipes the function returns by the fdin/fdout/fderr arguments.  A NULL value means "don't create a pipe", a pointer to an int will cause the pipes to be created and the value of the file descriptor stored in the int.  You will have to [close(2)](/close/2.md) the file descriptors yourself.

## RETURN VALUE

fdin -\> the stdin file descriptor of the sub process\
 fdout -\> the stdout file descriptor of the sub process\
 fderr -\> the stderr file descriptor of the sub process\
 pid -\> the pid of the sub process

## SEE ALSO

[**filter\_wait**(3)](/filter_wait/3.md), [**filter\_create\_fp**(3)](/filter_create_fp/3.md), **filter\_create\_fd**
