Linux x86_64IPC & sincronização#293
pipe2
Como pipe, mas aceita flags para criar os descritores já com O_CLOEXEC, O_NONBLOCK ou O_DIRECT.
Descrição
Evita a condição de corrida de aplicar essas flags separadamente com `fcntl` após `pipe`.
Header:
unistd.hman 2Desde o kernel 2.6.27Assinatura
int pipe2(int[2] pipefd, int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| pipefd | int[2] | Recebe os dois descritores do pipe. |
| flags | int | O_CLOEXEC, O_NONBLOCK e/ou O_DIRECT. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | pipefdint[2] |
| rsi | argumento 2 | flagsint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENFILE(23)
- Limite de arquivos abertos no sistema atingido.