Sistemas Unix sem / dev / stdin, / dev / stdout e / dev / stderr? [duplicado]

11

Uma resposta que dei a uma pergunta , e os comentários a ela, me fizeram ler a Seção Conformidade POSIX das definições base para descobrir se /dev/stdin , /dev/stdout e /dev/stderr foram realmente necessário para conformidade com o padrão POSIX.

Acontece que eles não são:

The system may provide non-standard extensions. These are features not required by POSIX.1-2008 and may include, but are not limited to: [...] Additional character special files with special properties (for example, /dev/stdin, /dev/stdout, and /dev/stderr)

Até onde eu posso encontrar, esta é a única menção desses arquivos no padrão.

Eu tenho acesso a apenas um "sistema" (ambiente, na verdade) que não os implementa, e isso é MinGW no Windows (sem /dev em tudo, até onde eu posso ver). Até onde sei, todos os Unices gratuitos os têm, e o Cygwin, o novo ambiente Linux do Windows e o Darwin / macOS.

Eu não sou bem versado com os Unices comerciais.

Existe um sistema POSIX, Unix ou um ambiente semelhante a Unix, com alguma descrição, viva hoje, que não implementa /dev/stdin , /dev/stdout e /dev/stderr como arquivos no sistema de arquivos?

    
por Kusalananda 19.01.2017 / 18:30

2 respostas

5

Is there a POSIX system, Unix, or a Unix-like environment of some description, alive today, that does not implement /dev/stdin, /dev/stdout, and /dev/stderr as files in the filesystem?

Sim, pelo menos pelo meu sistema de exemplo abaixo.

Eu não sou especialista neste sistema por nenhum meio; no entanto, AIX 6.1, que a wikipedia afirma é:

one of five commercial operating systems that have versions certified to The Open Group's UNIX 03 standard (https://en.wikipedia.org/wiki/IBM_AIX)

não parece implementar esses descritores de arquivos na instalação a que tenho acesso. Como você pode ver, se estiver usando o bash, ele se comportará como se existissem para fins de redirecionamento:

$ uname -s
AIX
$ echo $SHELL
/usr/bin/ksh
$ ls -al /dev/stdin
ls: 0653-341 The file /dev/stdin does not exist.
$ ls -al /dev/stdout
ls: 0653-341 The file /dev/stdout does not exist.
$ ls -al /dev/stderr
ls: 0653-341 The file /dev/stderr does not exist.
$ echo foo >/dev/stderr
The file access permissions do not allow the specified action.
ksh: /dev/stderr: 0403-005 Cannot create the specified file.
$ bash
bash-4.2$ ls /dev/stderr
ls: 0653-341 The file /dev/stderr does not exist.
bash-4.2$ echo foo >/dev/stderr
foo

Como outros comentaristas mencionaram, as seguintes perguntas também fornecem algumas informações interessantes:

por 26.01.2017 / 13:32
1

Estou postando bem após as postagens iniciais, mas pensei em adicionar esse comentário para futuros espectadores.

Eu obtenho os mesmos resultados gravando em / dev / stdout como acima em um sistema AIX 6.1, mas em um sistema AIX 7.1 ele funciona como esperado, então parece que o suporte para / dev / stdout foi adicionado.

AIX 6.1 (ksh93)

echo "Hello" > /dev/stdout                                            
ksh93: /dev/stdout: cannot create.
[The file access permissions do not allow the specified action.].

AIX 7.1 (ksh93)

echo "Hello" > /dev/stdout
Hello
    
por 08.01.2018 / 16:01