J'ai été renversé aujourd'hui par gdb
:
Program exited with code 0146.
gdb
imprime le code retour en octal ; en cherchant pourquoi j'ai trouvé:
http://comments.gmane.org/gmane.comp.gdb.devel/30363
Mais ce n'est pas une réponse particulièrement satisfaisante. Une recherche rapide sur Google n'a pas révélé l'histoire, alors j'espérais que quelqu'un sur SO connaîtrait l'histoire.
Une question quelque peu connexe, comment pourrait-on même voir le code de retour en octal? Peut-être que les machines plus anciennes imprimaient toujours le code retour?
$ printf %o\\n $?
Est assez maladroit :)
$?
est la valeur de shell pour le code de retour, et est un chiffre décimal (ou pris en charge par votre exemple gdb cmd aussi?). Je ne sais pas pourquoi gdb le signale en octal. Ma solution est de sortir le 'olman ascii
pour voir ce que signifient les valeurs octales. Question intéressante, car vous rencontrez également des valeurs octales provenant d'autres programmes. Peut-être que cela est discuté dans Kernighan et Pike's 'Unix Programming Envioronment'. Bonne chance.man ascii
serait également inutile de convertir l'octal en décimal.bc
serait un meilleur choix.Réponses:
La représentation octale facilite l'interprétation du code de sortie pour les petites valeurs, qui sont les plus couramment utilisées. Si ce nombre, qui est un octet, était imprimé en décimal, trouver quel signal a interrompu un processus nécessiterait un peu de calcul en octal, ils peuvent être lus tels quels:
gdb
s'affiche,05
ce qui ne fait aucune différenceSIGINT
( Control+ C), ungdb
affichage0202
qui est plus facile à reconnaître que le signal n ° 2130
.De plus, le statut de sortie peut également être un masque de bits et dans ce cas, octal (au moins lorsque vous y êtes habitué, ce qui était plus courant il y a quelques décennies que de nos jours) est plus facile à convertir mentalement en bits qu'en décimal ou même hexadécimal, comme par exemple
chmod
encore accepter un nombre octal pour représenter les autorisations de fichier:0750 = 111 101 000 = rwx r-x ---
.la source
Je n'ai pas de copie de ce texte et je viens de lire le court texte descriptif disponible sur Google Books mais. Selon le guide de portabilité X / Open System V Specification Commands & Utilities pg 283 (selon Google Books)
si une application se termine de manière anormale, son état de sortie est octal 0200 + status, et il existe une liste de valeurs communes de «status» (qui sont probablement également données en octal).
C'est donc / était un mauvais message d'erreur.
la source