|
|
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) |
Linha 1: |
Linha 1: |
− | == Fluxos Padrões ==
| |
− | * Fluxos Padrões (Standard Streams) são canais de entrada e saída.
| |
− | <br>
| |
| | | |
− | == Standard Input ==
| |
− | * Fluxo por onde dados entram no programa;
| |
− | ** Pelo teclado quando não é redirecionada;
| |
− | * '''C:''' FILE*stdin definida em stdio.h;
| |
− | * '''C++:''' std::cin definida na iostream.
| |
− | <br>
| |
− |
| |
− | * Exemplo:
| |
− | <code>
| |
− | int value; <br>
| |
− | fscanf(stdin, “%d”, &value); <br>
| |
− | scanf(“%d”, &value); // Equivalente à linha anterior <br>
| |
− | cin >> value; // Em C++
| |
− | </code>
| |
− | <br><br>
| |
− |
| |
− | == Standard Output ==
| |
− | * Fluxo onde o programa escreve dados de saída;
| |
− | * Quando não redirecionada, a saída é escrita no terminal onde o programa foi iniciado;
| |
− | * '''C:''' FILE *stdout definida em stdio.h;
| |
− | * '''C++:''' std::cout definida na iostream.
| |
− | <br>
| |
− |
| |
− | * Exemplo:
| |
− | <code>
| |
− | fprintf(stdout, “%s”, “Hello World\n”); <br>
| |
− | printf(“Hello World\n”); // Equivalente à linha anterior <br>
| |
− | cout << “Hello World” << endl; // Em C++ <br>
| |
− | </code>
| |
− | <br><br>
| |
− |
| |
− | == Standard Error ==
| |
− | * Fluxo de saída tipicamente usado por programas para mostrar mensagens de erro ou de diagnósticos;
| |
− | * O destino geralmente é o terminal de texto onde o programa foi iniciado, para ter mais chance de ser visto, mesmo que a saída padrão seja redirecionada.
| |
− | * '''C:''' FILE *stderr definida em stdio.h;
| |
− | * '''C++:''' std::cerr e std:clog definida na iostream.
| |
− | <br>
| |
− |
| |
− | * Exemplo:
| |
− | <code>
| |
− | fprintf(stderr, “Application error\n”); <br>
| |
− | cerr << “Application error” << endl; <br>
| |
− | </code>
| |
− | <br><br>
| |
− |
| |
− | == Redirecionamento de Fluxo ==
| |
− | * Recurso de ambientes UNIX, MS-DOS e do Prompt de Comando do Windows;
| |
− | * Permitem definir o nome do arquivo I/O através da linha de comando para executar o programa.
| |
− | * Como fazer:
| |
− | ** Escreva programas como um Filtro;
| |
− | ** Um filtro é um programa que lê dados da stdin, e escreve dados na stdout;
| |
− | ** Ler dados da entrada do teclado (não de um arquivo);
| |
− | ** Escrever dados no terminal (não em um arquivo).
| |
− | <br>
| |
− |
| |
− | * Exemplo:
| |
− | <table border="1" cellpadding="0" cellspacing="0" style="width:600px">
| |
− | <tr>
| |
− | <td style="width: 200px;">meu prog</td>
| |
− | <td>Roda o programa meu prog. Lê dados do teclado, e escreve a saída no monitor.</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>meu prog < arq.dat</td>
| |
− | <td>Roda o programa meuprog. Lê dados do arquivo arq.dat. Escreve a saída no monitor.</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>meu prog > arq.out</td>
| |
− | <td>Roda o programa meuprog. Lê entrada doteclado. Escreve saída no arquivo arq.out.</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>meu prog >> arq.out</td>
| |
− | <td>Roda o programa meuprog. Lê entrada do teclado. Adiciona a saída ao final do arquivo arq.out.</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>prog1 | prog2</td>
| |
− | <td>Roda os programas prog1 e prog2. Usa a saída do prog1 como entrada para o prog2. Dizemos que isso é um pipe da saída do prog1 para prog2.</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>meuprog < arq.dat > arq.out</td>
| |
− | <td>Roda o programa meuprog. Lê dados do arquivo arq.dat e escreve a saída no arquivo arq.out.</td>
| |
− | </tr>
| |
− | <tr>
| |
− | <td>meuprog2 > /dev/null</td>
| |
− | <td>Roda o programa meuprog. Lê dados do teclado e escreve a saída no monitor. Descarta todos os dados escritos em stderr.</td>
| |
− | </tr>
| |
− | </table>
| |
− | <br>
| |
− |
| |
− | * Código-fonte:
| |
− | <code>
| |
− | #include <stdio.h> <br>
| |
− | #include <stdlib.h> <br>
| |
− | int main(void) { <br>
| |
− | int valor; <br>
| |
− | scanf("%d", &valor); <br>
| |
− | fprintf(stderr, "Recebi %d\n", valor); <br>
| |
− | printf("%d\n", valor + 1); <br>
| |
− | return (EXIT_SUCCESS); <br>
| |
− | }
| |
− | </code>
| |
− | <br>
| |
− |
| |
− | == Entra e saída pelo terminal ==
| |
− | <code>
| |
− | paulo@notebook:~$ gcc exemplo.c -o fluxo <br>
| |
− | paulo@notebook:~$ ./fluxo <br>
| |
− | 1 <br>
| |
− | Recebi 1 <br>
| |
− | 2 <br>
| |
− | paulo@notebook:~$
| |
− | </code>
| |
− |
| |
− | <br>
| |
− | <code>
| |
− | paulo@notebook:~$ ./fluxo < /dev/zero <br>
| |
− | Recebi 0 <br>
| |
− | 1 <br>
| |
− | paulo@notebook:~$
| |
− | </code>
| |
− |
| |
− | <br>
| |
− | <code>
| |
− | paulo@notebook:~$ ./fluxo < /dev/zero > saida.txt <br>
| |
− | Recebi 0 <br>
| |
− | paulo@notebook:~$ cat saida.txt <br>
| |
− | 1 <br>
| |
− | paulo@notebook:~$
| |
− | </code>
| |
− |
| |
− | <br>
| |
− | <code>
| |
− | paulo@notebook:~$ ./fluxo < /dev/zero 2>/dev/null <br>
| |
− | 1 <br>
| |
− | paulo@notebook:~$
| |
− | </code>
| |
− |
| |
− | <br>
| |
− | <code>
| |
− | paulo@notebook:~$ ./fluxo < /dev/zero | ./fluxo <br>
| |
− | Recebi 0 <br>
| |
− | Recebi 1 <br>
| |
− | 2 <br>
| |
− | paulo@notebook:~$
| |
− | </code>
| |
− |
| |
− | <br>
| |
− | <code>
| |
− | paulo@notebook:~$ ./fluxo < /dev/zero | \ <br>
| |
− | > ./fluxo | ./fluxo | ./fluxo <br>
| |
− | Recebi 0 <br>
| |
− | Recebi 1 <br>
| |
− | Recebi 2 <br>
| |
− | Recebi 3 <br>
| |
− | 4 <br>
| |
− | paulo@notebook:~$
| |
− | </code>
| |
− |
| |
− | == <h6>Contribuintes</h6> ==
| |
− | * Paulo Roberto Urio (Autor)
| |