Mudanças entre as edições de "Redirecionamento de Entrada e saída"

(Contribuintes)
(Limpou toda a página)
 
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada)
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)
 
 
----
 
 
[[Ensino Extracurricular de Programação de Computadores | CLIQUE AQUI]] para voltar.
 

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