A função dup2 em C

  1. Use a função dup2 para duplicar um descritor de arquivo em C
  2. 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.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);
}

Artigo relacionado - C File

  • Obtenha o tamanho do arquivo em C
  • Verificar se existe um ficheiro em C