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)