Skip to content
Tiantan
Articles

De ce primesc eroarea 255 când returnez -1

On februarie 17, 2021 by admin

Sunt nou în programarea C ++ și am o întrebare foarte de bază. Am observat asta când returnează -1 în programul C ++ și apoi verific starea de ieșire, primesc 255. De ce este asta?

Codul este cel mai de bază:

int main() { return -1; } 

Apoi, după executarea codului compilat:

echo $? 255 

Răspuns

Deoarece în UNIX / POSIX, codul de ieșire al unui program este definit ca fiind o valoare de 8 biți nesemnată. Conversia -1 în 8 biți nesemnați dă 255.

Editați pentru a adăuga:

Pentru a oferi mai multe detalii: familia wait * () de apeluri de sistem din UNIX codifică rezultatul unui proces într-un singur număr întreg de 32 de biți. Cei 32 de biți ai acelui rezultat sunt divizați în continuare pentru a furniza informații, cum ar fi dacă procesul a aruncat nucleul, a ieșit din cauza unui semnal (și care), etc. Din acei 32 de biți, doar 8 sunt rezervați pentru codul de ieșire al procesului iar acestea sunt interpretate ca o valoare nesemnată.

Modelul fork / exec / wait al UNIX / POSIX este una dintre caracteristicile sale cele mai vechi și cele mai încorporate; dacă proiectați un nou sistem de operare astăzi, ați putea face ceva diferit (cel puțin utilizați 64 de biți :-)).

Pe de altă parte, practic vorbind este cu adevărat util să aveți> 255 de coduri de ieșire? Mă îndoiesc de asta. Dacă vrei cu adevărat ceva mai puternic, îți sugerez să treci la un „șir de ieșire”, în loc de un cod de ieșire numeric cu o gamă mai largă.

Comentarii

  • Modificare frumoasă. Vă mulțumim pentru acele informații suplimentare.

Răspuns

Pentru a cita din bash pagina man pe EXIT STATUS

Starea de ieșire a unei comenzi executate este valoarea returnată de apelul de sistem waitpid sau funcția echivalentă. Stările de ieșire se situează între 0 și 255, deși, așa cum se explică mai jos, shell-ul poate folosi valori mai mari de 125 special. Stările de ieșire din shell builtins și comenzile compuse sunt, de asemenea, limitate la acest interval. În anumite circumstanțe, shell-ul va folosi valori speciale pentru a indica moduri de eșec specifice.

Deci, îl plafonează la acel interval, de fapt sunt la fel de surprins ca sunteți.

Din pagina de manual waitpid (2):

WEXITSTATUS(status)

returnează starea de ieșire a copilului. Acesta constă din cei mai puțin semnificativi 8 biți ai argumentului de stare pe care copilul i-a specificat într-un apel pentru a ieși (3) sau _exit ( 2) sau ca argument pentru o declarație de returnare în main (). Această macrocomandă ar trebui utilizată numai dacă WIFEXITED a returnat adevărat.

Written by admin

Lasă un răspuns Anulează răspunsul

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Articole recente

  • Folosind un balun cu un dipol rezonant
  • Care este diferența dintre “ nu poate ” și “ nu poate ”? [duplicat]
  • La JFK, vă puteți deplasa între terminalele aeriene pe zborurile interne?
  • “ Apreciat profund ” sau “ apreciat cu drag ”
  • Ce înseamnă ' idei abstracte '? [închis]

Arhive

  • februarie 2021
  • ianuarie 2021
  • decembrie 2020
  • noiembrie 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top