A função dup2 em C
-
Use a função
dup2
para duplicar um descritor de arquivo em C -
Use a função
dup
para duplicar um descritor de arquivo em C
Este artigo irá explicar vários métodos de como usar a função dup2
em C.
Use a função dup2
para duplicar um descritor de arquivo em C
Os arquivos são geralmente manipulados após serem abertos usando a chamada de sistema open
. Em caso de sucesso, open
retorna um novo descritor de arquivo associado ao arquivo recém-aberto. Em sistemas baseados em Unix, o sistema operacional mantém uma lista de arquivos abertos para cada programa em execução, chamada de tabela de arquivos. Cada entrada é representada usando o inteiro do tipo int
. Esses inteiros são chamados de descritores de arquivo nesses sistemas, e muitas chamadas de sistema tomam os valores do descritor de arquivo como parâmetros.
Cada programa em execução tem três descritores de arquivo abertos por padrão quando o processo é criado, a menos que eles optem por fechá-los explicitamente. A função dup2
cria uma cópia do descritor de arquivo fornecido e atribui um novo inteiro a ele. dup2
usa um descritor de arquivo antigo para ser clonado como o primeiro parâmetro e o segundo parâmetro é o inteiro para um novo descritor de arquivo. Como resultado, esses dois descritores de arquivo apontam para o mesmo arquivo e podem ser usados de forma intercambiável. Observe que se o usuário especificar um inteiro usado atualmente pelo arquivo aberto como o segundo parâmetro, ele será fechado e reutilizado como o descritor de arquivo clonado.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern int counter;
int main(void) {
int fd = open("tmp.txt", O_WRONLY | O_APPEND);
printf("tmp.txt fd = %d\n", fd);
dup2(fd, 121);
dprintf(121, "This string will be printed in tmp.txt file\n");
exit(EXIT_SUCCESS);
}
Resultado:
tmp.txt fd = 3
O exemplo acima demonstra o uso básico da função dup2
, onde um arquivo arbitrário denominado tmp.txt
é aberto no modo append
e algum texto formatado é gravado nele. O descritor de arquivo padrão é 3
retornado da chamada de sistema open
. Depois de executar a chamada de função dup2
com o segundo argumento de 121
, o mesmo arquivo pode ser endereçado usando o novo descritor de arquivo. Conseqüentemente, chamamos a função dprintf
, que é semelhante à função printf
, exceto que leva um argumento descritor de arquivo adicional especificando o destino para escrever a saída.
Use a função dup
para duplicar um descritor de arquivo em C
Alternativamente, outra função chamada dup
faz a clonagem do descritor de arquivo semelhante a dup2
. No entanto, a função dup
leva um único argumento do descritor de arquivo a ser copiado e retorna o recém-criado automaticamente. O exemplo a seguir demonstra o uso dup
, onde armazenamos o valor retornado em um tipo int
e, em seguida, passamos a função dprintf
para o descritor de arquivo recuperado. Observe que o usuário é responsável por implementar as rotinas de verificação de erros para ambas as funções para verificar a execução bem-sucedida. Consulte a página de manual dup
/dup2
para obter os detalhes específicos aqui.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern int counter;
int main(void) {
int fd = open("tmp2.txt", O_WRONLY | O_APPEND);
printf("tmp2.txt fd = %d\n", fd);
int dup_fd = dup(fd);
dprintf(dup_fd, "This string will be printed in tmp2.txt file\n");
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook