Este programa executa o comando shell ps, depois redireciona o resultado para o arquivo fic_saída. Assim, a execução deste programa não deve imprimir nada na tela. A primitiva system() executa o comando passado como argumento.
/* arquivo test_dup2.c */ #include <errno.h> #include <stdio.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #define STDOUT 1 int main() { int fd ; /* associa fic_saida ao descritor fd */ if ((fd = open("fic_saida",O_CREAT|O_WRONLY| O_TRUNC,0666)) == -1){ perror("Error na abertura de fic_saida") ; exit(1) ; } dup2(fd,STDOUT) ; /* duplica a saida padrao */ system("ps") ; /* executa o comando */ exit(0); }
Resultado da execução:
euler:~/> test_dup2 euler:~/> more fic_saida PID TTY STAT TIME COMMAND 9819 ? S 0:01 -tcsh 11815 ? S 0:00 test_dup2 11816 ? R 0:00 ps
Note que outros redirecionamentos seguem o mesmo princípio, e que também é possível a realização de redirecionamentos de entrada e de saída.