Lịch sử Unix: trả về mã bát phân?


10

Tôi đã mất cảnh giác ngày hôm nay bởi gdb:

Program exited with code 0146.

gdbin mã trả về trong bát phân ; tìm hiểu lý do tại sao tôi tìm thấy: http://comments.gmane.org/gmane.comp.gdb.devel/30363

Nhưng đó không phải là một câu trả lời đặc biệt thỏa mãn. Một số googling nhanh chóng không tiết lộ lịch sử, vì vậy tôi đã hy vọng ai đó trên SO có thể biết câu chuyện phía sau.

Một câu hỏi hơi liên quan, làm thế nào người ta thậm chí sẽ xem mã trả về trong bát phân? Có lẽ máy cũ luôn in mã trả lại?

$ printf %o\\n $?

Khá là khó xử :)


những $?là giá trị của vỏ cho mã trở lại, và là một chữ số thập phân (hoặc không hỗ trợ gdb ví dụ của bạn cũng cmd?). Không biết tại sao gdb báo cáo nó trong bát phân. Giải pháp của tôi là lấy ra 'ol man asciiđể xem giá trị bát phân có ý nghĩa gì. Câu hỏi thú vị, khi bạn chạy vào các giá trị bát phân từ các chương trình khác. Có lẽ nó được thảo luận trong 'Envioronment' của Kernighan và Pike. Chúc may mắn.
shellter

Trạng thái thoát có thể lớn hơn một chữ số, nó thực sự là một byte. Ngoài ra, man asciisẽ không có ích để chuyển đổi bát phân thành thập phân. bcsẽ là một lựa chọn tốt hơn
jlliagre

2
Mã trả về là một số , không phải là số thập phân hoặc bát phân. Chương trình trả về một trạng thái (một byte). Với sự chờ đợi (3) hoặc bộ lạc của nó, quá trình cha mẹ có thể tìm ra rất nhiều thông tin về lý do tại sao quá trình thoát ra (thông thường, tức là, tự nguyện bằng cách gọi lối ra (2); bị giết bởi tín hiệu, ...)
vonbrand

Câu trả lời:


6

Biểu diễn bát phân giúp giảm bớt việc giải thích mã thoát cho các giá trị nhỏ, được sử dụng phổ biến nhất. Nếu số này, là một byte, được in ở dạng thập phân, việc tìm ra tín hiệu nào bị gián đoạn một quá trình sẽ yêu cầu một chút tính toán trong khi ở bát phân, chúng có thể được đọc như sau:

  • một quá trình thoát với trạng thái 5, gdbhiển thị 05không có sự khác biệt
  • một quá trình thoát vì nó có SIGINT( Control+ C), gdbhiển thị 0202dễ nhận biết là tín hiệu số 2 hơn 130.

Hơn nữa, trạng thái thoát cũng có thể là mặt nạ bit và trong trường hợp như vậy, bát phân (ít nhất là khi bạn đã quen với nó, một vài thập kỷ trước so với những ngày này) dễ dàng chuyển đổi tinh thần thành bit hơn thập phân hoặc thậm chí thập lục phân, giống như ví dụ chmodvẫn chấp nhận số bát phân để thể hiện quyền truy cập tệp : 0750 = 111 101 000 = rwx r-x ---.


có lẽ là nơi sai để hỏi điều này, nhưng có một cách dễ dàng để biết nếu một số được đưa ra bởi GDB là số bát phân hay thập phân?
marinara

3
Quy ước là nếu nó bắt đầu bằng 0 (0), thì đó là bát phân.
jlliagre

3

Tôi không có một bản sao của văn bản này và chỉ đọc những đoạn ngắn có sẵn trên sách google nhưng. Theo hướng dẫn về tính di động của X / Open System V Các lệnh và tiện ích của trang pg 283 (theo sách của google)

nếu một ứng dụng chấm dứt bất thường trạng thái thoát của nó là trạng thái bát phân 0200 + và có một danh sách các giá trị 'trạng thái' chung (có thể cũng được đưa ra trong bát phân).

Vì vậy, nó là / là một thông báo lỗi mans nghèo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.