Redirecionamento de Entrada e saída: mudanças entre as edições

De Wikiunicentro
Lpadilha (discussão | contribs)
Criou página com '== 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 tecla...'
 
Lpadilha (discussão | contribs)
Limpou toda a página
 
(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&ecirc; dados do teclado, e escreve a sa&iacute;da no monitor.</td>
</tr>
<tr>
<td>meu prog &lt; arq.dat</td>
<td>Roda o programa meuprog. L&ecirc; dados do&nbsp;arquivo arq.dat. Escreve a sa&iacute;da no&nbsp;monitor.</td>
</tr>
<tr>
<td>meu prog &gt; arq.out</td>
<td>Roda o programa meuprog. L&ecirc; entrada doteclado. Escreve sa&iacute;da no arquivo arq.out.</td>
</tr>
<tr>
<td>meu prog &gt;&gt; arq.out</td>
<td>Roda o programa meuprog. L&ecirc; entrada do&nbsp;teclado. Adiciona a sa&iacute;da ao final do arquivo&nbsp;arq.out.</td>
</tr>
<tr>
<td>prog1 | prog2</td>
<td>Roda os programas prog1 e prog2. Usa&nbsp;a sa&iacute;da do prog1 como entrada para o&nbsp;prog2. Dizemos que isso &eacute; um pipe da&nbsp;sa&iacute;da do prog1 para prog2.</td>
</tr>
<tr>
<td>meuprog &lt; arq.dat &gt; arq.out</td>
<td>Roda o programa meuprog. L&ecirc; dados&nbsp;do arquivo arq.dat e escreve a sa&iacute;da no&nbsp;arquivo arq.out.</td>
</tr>
<tr>
<td>meuprog2 &gt; /dev/null</td>
<td>Roda o programa meuprog. L&ecirc; dados&nbsp;do teclado e escreve a sa&iacute;da no monitor.&nbsp;Descarta todos os dados escritos em&nbsp;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)

Edição atual tal como às 03h55min de 13 de maio de 2015