C: Redirecionando stdout

É comum em utilitários que rodam em um terminal e escrevem na saída padrão (stdout) a existência de um parâmetro que permite redirecionar a saída para um arquivo (geralmente -o).

Uma maneira simples de implementar essa redireção é copiando o descritor do arquivo especificado para o descritor 1 (do stdout). Pode-se implementar isso da seguinte maneira, dentro do tratamento dos parâmetros de linha de comando:

    case 'o':
        ofd = open(optarg, O_WRONLY|O_CREAT|O_TRUNC, 0644);
        if (ofd < 0) {
            perror("open");
            exit(1);
        }
        dup2(ofd, STDOUT_FILENO);
        break;

onde optarg é o parâmetro passado para -o. Assim, o restante do código pode ser escrito sem se preocupar com o arquivo de saída, usando printf() normalmente para escrever em stdout.

This entry was posted in C and tagged , , , , , . Bookmark the permalink.