Histórico do Unix: código de retorno octal?

10

// EDIT: Pedido para mover esta questão para unix.stackexchange.com

Eu fui pego de surpresa hoje pelo gdb:

Program exited with code 0146.

gdb imprime o código de retorno em octal ; olhando porque eu encontrei: link

Mas essa não é uma resposta particularmente satisfatória. Algumas pesquisas rápidas não revelaram a história, então eu esperava que alguém em SO pudesse saber a história por trás.

Uma pergunta um tanto relacionada, como alguém poderia ver o código de retorno em octal? Talvez máquinas mais antigas sempre imprimissem o código de retorno?

$ printf %o\n $?

É bem desajeitado:)

    
por Pat 10.11.2011 / 06:34

2 respostas

6

A representação octal facilita a interpretação do código de saída para valores pequenos, que são os mais usados. Se esse número, que é um byte, tiver sido impresso em decimal, descobrir qual sinal interrompeu um processo exigiria um pouco de cálculo enquanto estiver em octal, ele poderá ser lido como está:

  • um processo sai com o status 5, gdb exibe 05 , o que não faz diferença
  • um processo sai porque ele tem um SIGINT (Control-C), gdb exibe 0202 , que é mais fácil de reconhecer como sinal # 2 do que 130 .
Além disso, o status de saída também pode ser um pouco de máscara e, nesse caso, o octal (pelo menos quando você está acostumado a ele, que era mais comum há algumas décadas) é mais fácil de converter mentalmente em bits do que decimal ou mesmo hexadecimal, assim como por exemplo chmod ainda aceita um número octal para representar permissões de arquivo: 0750 = 111 101 000 = rwx rx ---.

    
por 10.11.2011 / 23:18
2

Eu não tenho uma cópia deste texto e apenas leio a breve sinopse disponível no google books, mas. De acordo com o guia X / Open Portability System V Specification Commands & Utilitários pg 283 (de acordo com o google books)

se um aplicativo terminar anormalmente, seu status de saída é octal 0200 + status e há uma lista de valores comuns de 'status' (que provavelmente também são fornecidos em octal).

Portanto, é / foi uma mensagem de erro do tipo pobre.

    
por 10.11.2011 / 19:30

Tags