Unterschiede zwischen Rückgabewerten in main()



  • Ich frage mich, wo der Unterschied zwischen den verschiedenen Rückgabewerten in main() liegt. Manchmal sieht man return 0; (das ist klar), aber auch return 1, return 2, return 5 usw..

    Bisher konnte ich dazu nichts finden. 😞



  • 0 bedeutet Erfolg.
    Alles andere ist ein Fehlercode den du selber bestimmen kannst. Je nach Plattform kann es bestimmte Konventionen geben welcher Code was sagt - aber da schweigt der C Standard.

    Sinnvoll ist es halt für jeden Fehler einen anderen Wert zu returnen und das irgendwo zu dokumentieren.



  • Viele Fehler werden durch eine Zahl kodiert, damit der Programmiere die Fehler erkennen kann. Aber beim main() glaube ich, spielt das keine große Rolle, ob du return 1; oder return 377473673; machst.



  • supertux schrieb:

    Aber beim main() glaube ich, spielt das keine große Rolle, ob du return 1; oder return 377473673; machst.

    Klar, sofern man es dokumentiert.

    Gerade in der Unix-welt verwendet man gerne und viel Kommandozeilenprogramme. Man baut sich mit diesen quasi größere Programme zusammen indem man sie miteinander 'koppelt'. Und wenn es da einen fehler gibt, ist es natürlich immer praktisch wenn man einen Fehlercode hat, unter dem man nachschlagen kann. Ob er jetzt 1 oder 2 ist, ist egal. Nur dokumentiert sollte er sein - und eindeutig.



  • Die Rückgabe Werte sind auch dann wichtig wenn man ein Programm aus einem anderen Programm oder Script (Batch) heraus aufruft.

    Ich ärgere mich gerade über das M$ ping, da es immer 0 zurückgibt egal ob der ping erfolgreich war (d.h. IP-Adresse hat geantwortet) oder nicht.

    Ich wollte das ping aus einem anderen Programm aufrufen um festzustellen ob eine IP-Adresse in Benutzung ist oder nicht. jetzt muß ich den ganzen Output von ping in eine Datei umleiten und diese Datei auswerten. 😡 Außerdem kann das ping kein Broadcast grummel grummel. 😡

    Jedes Programm sollte eine return Wert haben 0 wenn erfolgreich != 0 wenn ein Fehler aufgetreten ist

    😃 Soviel von mir zu return Werten. 🙂



  • Shade Of Mine schrieb:

    Und wenn es da einen fehler gibt, ist es natürlich immer praktisch wenn man einen Fehlercode hat, unter dem man nachschlagen kann. Ob er jetzt 1 oder 2 ist, ist egal.

    Und wenn man sich nicht entscheiden kann: EXIT_FAILURE



  • PAD schrieb:

    Ich wollte das ping aus einem anderen Programm aufrufen um festzustellen ob eine IP-Adresse in Benutzung ist oder nicht. jetzt muß ich den ganzen Output von ping in eine Datei umleiten und diese Datei auswerten. 😡 Außerdem kann das ping kein Broadcast grummel grummel. 😡

    Warum machst du dir dann in deinem Programm nicht selber einen Ping?



  • weil ich in diesem Bereich keine Erfahrung habe, und mich erst einarbeiten müsste. Das läßt das Projekt zeitmäßig derzeit nicht zu.

    Das Problem hat sich aber geköst, Dank dieses Forums habe ich Zugriff auf einen ping Source bekommen, den ich modifizieren konnte und die jetzt funktioniert.



  • AJ schrieb:

    Warum machst du dir dann in deinem Programm nicht selber einen Ping?

    Weil ping auf Unix-Systemen root-Rechte braucht, und somit meist setuid root ist. Und die meisten Sysadmins sehen das ungerne, wenn man mit einem eigenen Programm ankommt, und dafür auch suid-root haben will 😃



  • @SG1
    Ich dachte eigentlich eher daran, dass man das Protokoll im Programm verwendet und nicht dass man anstatt dem bestehendem Programm Ping ein zweites eigenes macht und dieses dann dafür aufruft (wär ja das gleiche in grün 🙄 ).



  • AJ: Eben, um das "Ping-Protokoll" (eigentlich ICMP Echo) zu benutzen, muss man ein Raw Socket aufmachen, TCP oder UDP tuts da nicht. Dafür benötigt man aber Superuser-Rechte.

    Das Ping-Programm hat ein gesetztes SUID-Bit, d.h. dass es mit der Benutzerkennung und den Privilegien des Besitzers (root) statt denen des Aufrufers (sterblicher) läuft.



  • Auch wenn man es bei ping vermuten könnte, das ich mit unix probleme habe ist das leider falsch. Ich bin durch M$ eingeschränkt.

    Das ping problem habe ich aber inzwischen durch Hilfe aus dem Forum gelöst

    Trotzdem Danke



  • @Bashar
    Achso. Kenne mich leider mit solchen Details nicht so aus :(.


Anmelden zum Antworten