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.