2015-11-17 8 views
7

In C, ist int main(int argc, char *argv[]) wirklich erforderlich, um Programmargumente zu erhalten? Mit anderen Worten, ist es beim Definieren der Hauptfunktion mit der Signatur int main(void) möglich, die Programmargumente nur mit POSIX-Schnittstellen wiederherzustellen?Kann in POSIX ein Main (void) Befehlszeilenargumente wiederherstellen?

Ich fühle mich wie ich etwas fehle, zu sehen, dass:

  • POSIX mehrere Schnittstellen definiert andere prozessspezifische Informationen abzurufen. Zum Beispiel gibt es Schnittstellen für Umgebungsvariablen (die wahrscheinlich von C99 geerbt wurden, aber auch um Funktionen wie unsetenv() erweitert wurden) und Host-Identifikation (gethostid()).
  • Bestimmte Betriebssysteme definieren "globale" Möglichkeiten zum Abrufen der Befehlszeilenargumente. Beispielsweise stellt Windows die Funktionen GetCommandLineW und CommandLineToArgvW bereit, und HP-UX stellt die globalen Variablen __argc_value und __argv_value bereit. Linux hat /proc/self/cmdline, die in argv und argc geparst werden können.
+0

Ich würde sagen, es ist die Implementierung definiert. –

+0

Betrachten Sie eine Funktion 'int f (void)'. Wie greifen Sie auf alle Argumente zu, die Sie vom Aufrufer an die Funktion übergeben haben? – Olaf

+1

In Bezug auf Windows ist zu beachten, dass Windows eine [vollständig von der Implementierung definierte Methode zur Definition von main] verwendet (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633559%28v=vs.85%29. aspx), was die Notwendigkeit erklären könnte, Befehlszeilenargumente durch separate Nicht-Standard-API-Funktionen zu erhalten. – Lundin

Antwort

4

POSIX-Spezifikationen enthalten keine Funktionen zum Abrufen von Befehlszeilenargumenten. Alle angegebenen Funktionen erfordern im Wesentlichen main() zu Orchestrieren Passing argc und argv analysiert werden.

POSIX-Spezifikationen (IEEE 1003.1, Ausgabe 2013 - die aktuelle Version, während ich dies schreibe) hat einen Abschnitt beschreibt die Befehlszeile Syntax von den Standard-Utilities (die im Volume "Shell and Utilities" beschrieben). Allerdings würden diese Dienstprogramme - natürlich genug - POSIX-Funktionen verwenden, also mit einer main(argc, argv) implementiert werden, die sie aufruft.

Verwandte Themen