O POSIX padroniza os números do descritor de arquivos?

4

O POSIX exige que stdin seja 0, stdout seja 1 e stderr seja 2 ou isso é apenas uma convenção? Outros sistemas divergem dessa convenção ou é uma suposição segura?

    
por Evan Carroll 13.04.2018 / 20:41

2 respostas

11

Parece que eles são padronizados na especificação POSIX,

  • POSIX.1-2017 por procuração de unistd.h

    The header shall define the following symbolic constants for file streams:

    • STDERR_FILENO File number of stderr; 2.
    • STDIN_FILENO File number of stdin; 0.
    • STDOUT_FILENO File number of stdout; 1.
  • Mas também os documentos POSIX sobre " stderr , stdin , stdout - padrão I / O streams " state,

    This volume of POSIX.1-2017 defers to the ISO C standard.

  • O padrão ISO ISO / IEC 9899: 201x somente ,

    The three predefined streams stdin, stdout, and stderr are unoriented at program startup.

Parece que o ISO C é relativamente silencioso, permitindo que o kernel atribua o que quiser aos descritores conhecidos como STDOUT , STDERR e STDIN . Mas que os documentos POSIX em unistd.h são explícitos sobre o que eles devem resolver nesse nível.

Outros sistemas operacionais

por 13.04.2018 / 20:48
2

A especificação POSIX para Linguagem de Comando Shell, Seção 2.7, Redirecionamento , diz

The overall format used for redirection is:
 [n‪] redir-op word

The number n is an optional decimal number designating the file descriptor number; …
    ︙
…  The values 0, 1, and 2 have special meaning and conventional uses and are implied by certain redirection operations; they are referred to as standard input, standard output, and standard error, respectively.  …

    ︙

The general format for redirecting input is:
 [n ]<word

where the optional n represents the file descriptor number.  If the number is omitted, the redirection shall refer to standard input (file descriptor 0).

... e um parágrafo semelhante dizendo que > é equivalente a 1> , referindo-se à saída padrão.

    
por 14.04.2018 / 05:31