Canais padrão

Da Wikipédia, a enciclopédia livre.
Ir para a navegação Ir para a pesquisa

Na ciência da computação, os canais padrão (ou fluxos padrão ), em todos os sistemas operacionais modernos , representam os dispositivos lógicos de entrada e saída que conectam um programa ao ambiente operacional no qual ele é executado (normalmente um terminal de texto ) e que são automaticamente conectados quando é iniciado .

Esses canais predefinidos estão disponíveis em sistemas operacionais Unix e semelhantes a Unix , ambientes de execução de linguagem C e C ++ e seus derivados.

Os três canais de entrada / saída padrão são chamados de entrada padrão , saída padrão e erro padrão (às vezes abreviado para stdin , stdout e stderr respectivamente ).

História

Na maioria dos sistemas operacionais pré-Unix, os programas tinham que criar explicitamente links para dados de entrada e saída. Para muitos desses sistemas, isso pode representar um verdadeiro desafio de habilidade de programação , devido à complexidade dos detalhes técnicos necessários para obter, por exemplo, a configuração do ambiente de execução, ou para acessar uma tabela de arquivos local, ou para determinar o conjunto de dados sobre os quais operar e gerenciar separadamente caixas específicas para cartões e fitas perfuradas, fitas magnéticas, discos, impressoras e terminais interativos.

O Unix foi a fonte de inovações radicais, incluindo a abstração de dispositivos de entrada / saída: isso liberou os programas da carga de saber ou gerenciar o tipo de dispositivos com os quais estavam se comunicando. Os sistemas operacionais predecessores exigiam que o programador executasse operações de leitura e gravação em blocos de dados, geralmente com dados e semânticas de controle periférico que não eram ortogonais. O Unix eliminou essa complexidade introduzindo o conceito de fluxo de dados , ou seja, sequências ordenadas de bytes que podem ser lidos até o esgotamento. Um programa também tinha a capacidade de gravar quantidades arbitrárias de dados, sem precisar declarar com antecedência o tamanho total e como agrupá-los.

Outra inovação do Unix foi a de disponibilizar automaticamente canais de entrada e saída predefinidos: no caso típico de um programa que adquire dados de entrada e os processa para então produzir os resultados de saída, o programa (e o programador) não precisa fazer nada para preparar os canais de entrada e saída; os sistemas operacionais predecessores do Unix, por outro lado, geralmente exigiam a preparação de instruções - muitas vezes complexas - expressas em Job Control Language ou, em qualquer caso, carregavam o programa com uma carga equivalente.

Como o Unix fornecia os canais padrão, os ambientes de execução da linguagem C tinham que oferecer suporte para isso, com o resultado que hoje a maioria deles (e descendentes da linguagem C) fornece funcionalidade equivalente independente do sistema operacional.

Descrição

Entrada padrão (stdin)

A entrada padrão é um canal a partir do qual um fluxo de dados (geralmente textuais) chega a um programa. O programa os transfere executando operações de leitura . Nem todos os programas precisam de dados de entrada: por exemplo, os comandos ls ou dir (que mostram o conteúdo dos diretórios ) fazem seu trabalho sem a necessidade de ler os dados de entrada.

O fluxo de entrada, exceto em casos de redirecionamento , vem do terminal (por exemplo, pelo usuário via teclado ) a partir do qual o programa foi iniciado.

O descritor de arquivo associado à entrada padrão é aquele com índice 0 ; a variável de linguagem C correspondente, definida em <stdio.h> , é FILE * stdin ; da mesma forma, a variável de linguagem C ++ definida em <iostream> é std :: cin .

Saída padrão (stdout)

A saída padrão é o canal no qual um programa grava seus dados de saída. O programa transfere dados executando operações de gravação . Nem todos os programas produzem saída: por exemplo, o comando mv (que altera o nome de um arquivo ou diretório) normalmente não produz dados de saída.

O fluxo de saída, exceto em casos de redirecionamento , é direcionado ao terminal a partir do qual o programa foi iniciado (por exemplo, para monitorar ou console em favor do usuário).

O descritor de arquivo associado à saída padrão é aquele com índice 1 ; a variável de linguagem C correspondente, definida em <stdio.h> , é FILE * stdout ; da mesma forma, a variável de linguagem C ++, definida em <iostream> , é std :: cout .

Erro padrão (stderr)

O erro padrão é outro canal de saída, normalmente usado por programas para mensagens de erro ou diagnóstico. É um canal independente da saída padrão e pode ser redirecionado separadamente dos outros. Seu destino é geralmente o terminal de onde o programa foi iniciado, a fim de maximizar as chances de ser visto mesmo quando a saída padrão é direcionada para outro lugar: por exemplo, no caso de um pipeline de software , a saída de um programa que é fornecida como entrada para o próximo programa, mas suas mensagens de erro ainda são exibidas no terminal.

É aceitável e normal que a saída padrão e o erro padrão tenham o mesmo destino, como no caso do terminal de texto: as mensagens aparecem na mesma ordem em que o programa as escreve, exceto quando buffers estão em uso (por exemplo, quando o o erro padrão não tem buffer e a saída padrão tem um buffer de linha: neste caso, os dados gravados no erro padrão posteriormente podem aparecer antes dos dados gravados na saída padrão a princípio, pois o buffer de saída padrão pode ainda não ter preenchido).

O descritor de arquivo associado ao erro padrão é aquele com índice 2 ; a variável de linguagem C correspondente, definida em <stdio.h> , é FILE * stderr ; na linguagem C ++ <iostream> define duas variáveis ​​associadas a este canal: std :: cerr e std :: clog , das quais a primeira não tem buffer enquanto a segunda usa buffers semelhantes aos outros canais C ++.

A maioria dos shells de texto permitem que você redirecione a saída padrão e o erro padrão para o mesmo arquivo com a sintaxe

 > & nome do arquivo

Equivalente a:

 &> nome do arquivo

O shell Bourne e seus derivados permitem que você direcione o erro padrão para o mesmo destino que a saída padrão com a sintaxe

 2> e 1

Cronologia

1950 : Fortran

Fortran forneceu o equivalente aos descritores de arquivo Unix , UNIT=5 para entrada padrão e UNIT=6 para saída padrão .

 ! Exemplo de FORTRAN 77
      PROGRAMA PRINCIPAL
      LEIA ( UNIDADE = 5 , * ) NÚMERO
      ESCREVER ( UNIDADE = 6 , '(F5.3)' ) 'NÚMERO É:' , NÚMERO
      FIM

1960 : ALGOL 60

ALGOL 60 foi criticado por não fornecer um mecanismo padrão de acesso a arquivos .

1968 : ALGOL 68

O termo transput geralmente se refere às funções de entrada e saída do ALGOL 68 . Koster coordenou a definição do padrão de transput . Este padrão incluía: stand in - stand in , stand out , stand back e stand error .

Exemplo:

 # ALGOL 68 exemplo #
a Principal :(
  Número real;
  getf (substitua, ($ g $, número));
  printf (($ "Número é:" g (6,4) "OU" $, número)); # OU #
  putf (destaque, ($ "Número é:" g (6,4) "!" $, número));
  newline (destaque)
)
Entrada: Saída:
 3,14159
 O número é: +3,142 OU o número é: +3,142!

1970 : C e Unix

Na linguagem C, os stderr stdin , stdout e stderr foram associados aos descritores de arquivo Unix 0, 1 e 2, respectivamente.

1980 : C ++

Em C ++, os canais padrão eram associados aos objetos cin , cout e cerr .

1990 : Java

Em Java e nas linguagens que aderem a esta plataforma, os canais padrão referem-se a: System.in (para stdin), System.out (para stdout) e System.err (para stderr). Como exemplo, você pode usar o objeto BufferedReader classe BufferedReader :

 public static void main ( String args [] ) {
    tente {
        BufferedReader br = 
          novo BufferedReader ( novo InputStreamReader ( System . in ));
        String s = br . readLine ();
        número duplo = duplo . parseDouble ( s );
        Sistema . fora. println ( "Número é:" + número );
    } catch ( Exceção e ) {
        Sistema . err . println ( "Erro:" + e . getMessage ());
    }
}

Ou você pode usar a classe Scanner , pertencente ao pacote java.util

 public static void main ( String [] args ) {
        Scanner sc = novo Scanner ( Sistema . In );
        while ( sc . hasNextLine ()) {
            String line = sc . nextLine ();
            número duplo = duplo . parseDouble ( linha );
            Sistema . fora. println ( "Número é:" + número );
        }
    }

Década de 2000 : .NET

Em C sharp e outras linguagens .NET Framework , os canais padrão tornaram-se acessíveis via System.Console (para entrada e saída padrão ) e System.Console.Error (para erro padrão )

 // exemplo C #
public static int Main ()
{
    número duplo ;
    string s ;

    Experimente
    {
        s = sistema . Console . ReadLine ();
        número = duplo . Analisar ( s );
        Sistema . Console . WriteLine ( "Número é: {0: F3}" , número );
        return 0 ;
    }
    catch ( System . FormatException e )
    {
        // se Parse () lançou uma exceção
        Sistema . Console . Erro . WriteLine ( "Nenhum número foi inserido!" );
        return 1 ;
    }
}
 'Exemplo de Visual Basic .NET

Função pública Main () como inteiro
    Dim number As Double
    Dim s As String

    Experimente
        s = sistema . Console . ReadLine ()
        número = CDbl ( s )
        Sistema . Console . WriteLine ( "Número é: {0: F3}" , número )
        Retorno 0
    Catch and As System . InvalidCastException
        'se Parse () lançou uma exceção
        Sistema . Console . Erro . WriteLine ( "Nenhum número foi inserido!" )
        Retorno 1
    Fim da tentativa
Função Final

GUI

As interfaces gráficas raramente fazem uso de canais padrão e, conseqüentemente, com eles, o redirecionamento e os pipelines de software não são práticos nem úteis. As ações de recortar , copiar e colar entre diferentes aplicativos são provavelmente o que melhor se aproxima do conceito de canais padrão, mas como devem ser feitas manualmente, ter que executar um grande número deles não é particularmente eficiente. Uma exceção ao acima pode ser o gerenciador de janelas dinâmico , que lê as mensagens de status a serem exibidas a partir da entrada padrão .

Alguns programas GUI, principalmente em sistemas Unix e semelhantes ao Unix , ainda usam o erro padrão para escrever suas mensagens de diagnóstico.

Bibliografia

Itens relacionados

links externos

Informática Portal de TI : acesse as entradas da Wikipedia que lidam com TI