Історія Unix: код повернення восьмеричний?


10

Сьогодні мене зняли з охорони gdb:

Program exited with code 0146.

gdbдрукує код повернення в восьмеричному ; вивчаючи, чому я знайшов: http://comments.gmane.org/gmane.comp.gdb.devel/30363

Але це не особливо задоволена відповідь. Деякий швидкий гуглінг не розкрив історію, тож я сподівався, що хтось із ТАК може знати історію ззаду

Дещо пов’язане питання, як можна було б навіть переглянути код повернення в восьмеричному? Можливо, старші машини завжди друкували код повернення?

$ printf %o\\n $?

Досить незручно :)


значення $?оболонки для повернення коду і є десятковою цифрою (чи gdb також підтримує ваш приклад cmd?). Не знаю, чому gdb повідомляє про це в восьмериці. Моє рішення - вийти з поля, man asciiщоб побачити, що означають восьмеричні значення. Цікаве питання, оскільки ви також стикаєтесь із восьмеричними значеннями в інших програмах. Можливо, це обговорюється в програмі "Енвіоронмент програмування" Керніган та Пайка. Удачі.
обстріл

Статус виходу може бути більшим за цифру, це насправді байт. Крім того, man asciiне буде корисно перетворювати восьмеричний у десятковий. bcбув би кращим вибором.
jlliagre

2
Зворотний код - це число , а не десятковий чи восьмеричний. Програма повертає статус (один байт). Зачекавши (3) або його плем'я, батьківський процес може дізнатися багато інформації про те, чому процес вийшов (як правило, тобто добровільно, викликавши вихід (2); вбитий сигналом, ...)
vonbrand,

Відповіді:


6

Октальне подання полегшує інтерпретацію вихідного коду для малих значень, які найбільш часто використовуються. Якщо це число, що є байтом, буде надруковано у десятковій формі, для знаходження сигналу, який перервав процес, знадобиться трохи обчислити, перебуваючи у восьмериці, їх можна прочитати як вони:

  • процес закінчується зі статусом 5, gdbвідображаючи 05який не має різниці
  • процес закінчується, оскільки він отримав SIGINT( Control+ C), gdbвідображає 0202який легше розпізнати як сигнал №2, ніж 130.

Більше того, статус виходу також може бути трохи маскою, і в такому випадку восьмеричний (принаймні, коли ви звикли до нього, яке було звичайніше пару десятиліть тому, ніж ці дні), легше перетворити подумки на біти, ніж у десятковий чи навіть шістнадцятковий, так само , як, наприклад , по- chmod, як і раніше приймає вісімкове число для подання прав доступу до файлів: 0750 = 111 101 000 = rwx r-x ---.


напевно, неправильне запитання про це, але чи є простий спосіб сказати, чи є число, задане GDB, у восьмеричному чи десятковому?
маринара

3
Конвенція полягає в тому, що якщо вона починається з нуля (0), вона є вісімковою.
jlliagre

3

У мене немає копії цього тексту, і я просто прочитав коротке розмиття, доступне в Google книгах, але, але. Відповідно до посібника X / Open Portability System V Специфікації Commands & Utilities pg 283 (згідно з книгами Google)

якщо програма закінчується аномально, її вихідний статус є восьмеричним 0200 +, і є список загальних значень "статусу" (які, ймовірно, також наведені у восьмеричному).

Отже, це було / було поганим повідомленням про помилку Мана.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.