DUP(2)

NOME
dup, dup2 - duplica um descritor de arquivos

SINOPSE
#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);

DESCRIÇÃO
dup e dup2 criam uma cópia do descritor de arquivos oldfd.

Depois do retorno bem sucedido de dup ou dup2, o velho e o novo descritores podem ser usados sem distinção. Eles compartilham travamento, posicionamento do arquivo, ponteiros e sinalizadores; por exemplo, se a posição do arquivo é modificada usando-se lseek em um dos descritores, a posição é, também, alterada para o outro.

De qualquer forma, Os dois descritores não dividem o sinalizador close-on-exec.

dup usa o mais baixo número não usado de descritor para o novo descritor.

dup2 makes newfd ser a cópia de oldfd, closing newfd primeiro se necesário.

VALORES RETORNADOS
dup e dup2 retorna o novo descritor, ou -1 se um erro occurrido (neste caso, errno é selecionado adequadamente).

ERROS

EBADF
    oldfd não é um descritor de arquivo aberto, ou newfd está fora do intervalo permitido para descritores de arquivos.

EMFILE
    O processo tem um número máximo de descritores de arquivos abertos e tenta abrir um novo.

ADVERTÊNCIA
O erro retornado por dup2 é diferente que aquele retornado por fcntl(..., F_DUPFD, ...) quando newfd está fora do intervalo. Em muitos sistemas dup2 também retorna às vezes EINVAL como F_DUPFD.

DE ACORDO COM
SVr4, SVID, POSIX, X/OPEN, BSD 4.3. SVr4 documenta condições de erros adicionais EINTR e ENOLINK. POSIX.1 adiciona EINTR.

VEJA TAMBÉM
fcntl(2), open(2), close(2)