[Inhalt][0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15][16][17]
Teil 14 : Nützliches Allerlei

Heute werden wir uns mit Funktionen beschäftigen, die man immer mal wieder brauchen kann.
 
int n = system ( char *c )

Wollten sie nicht schon immer mal einen Aufruf des Kommandozeileninterpreters (was für ein Wort) machen oder einfach nur das dir - Kommando benutzen ? Kein Problem ! Vorher muß noch folgende Library eingebunden werden
 

#include <stdlib.h>

In einem kompletten Beispiel sieht das dann so aus:
 

#include <stdio.h> 
#include <stdlib.h> 

void main ( void

    int status; 

    printf ("\nRein in die Befehlsebene\n"); 
    printf ("Mit EXIT gelangen sie wieder ins Programm\n\n"); 

    status = system ("command"); 

    printf ("\n\nWeiter im Programm\n\n"); 
     

}

Ist doch nicht so schwer, wie man es sich dachte. Möchte man nun die Directory anzeigen, benötigt man nur noch ein simples
 

#include <stdio.h> 
#include <stdlib.h> 

void main ( void

    int status; 

    printf ("\nSchauen wir uns mal dir Directory an\n"); 

    status = system ("dir \w"); 

    printf ("\n\nWeiter im Programm\n\n"); 
     

}

Der Rückgabewert enthält eine 0 , wenn das Programm Ordnungsgemäß lief, anderfalls eine Zahl ungleich Null, wobei der Wert einer Fehlermeldung entspricht. Unter MS-DOS kann man ihn z.B. mittels des Fehlercodes ERRORLEVEL abfragen. Wenn man nun das eigene main-Modul auf diese Weise einen Wert zurückgibt, entspricht dieser dann dem Wert, was das aufrufende Programm zurückgeliefert bekommt. Wenn man oberes Programm nun startet, sieht man das man komfortabel auf diese Weise Programme ausführen kann.

Screenshot des ausgeführten Programms



 
 
 
 
Parameterübergabe an das Hauptprogramm

Wer kennt das nicht, da ruft man einige Programme mit Parametern auf und wundert sich: Wie machen die das ? Nichts ist unmöglich.... Auch ohne Toyota wollen wir dieses kleine Geheimnis lüften. Bisher sah unser Hauptmodul immer so aus
 

void main (void )

Hier hatten wir bisher leere Übergaben (= void) in den Klammern im main-Modul. Doch wenn wir in anderen Modulen dort Parameter stehen haben können, warum nicht auch hier ? Wie wir bisher schon kennenlernten ist main ein besoneres Modul. Es existieren zwei Standardparameter argc und argv , welche wie folgt aussehen.
 

void main ( int argc , char *argv [ ] )

Das erste Argument argc enthält die Anzahl der Parameter als Integervariable und argv speichert die einzelnen Parameter als Strings. Die Übergabe der Parameter wird beim Programmaufruf vom Betriebssystem übernommen.  Folgendes Programm schreibt die Anzahl und die übergebenen Parameter auf den Bildschirm:
 

#include <stdio.h> 

void main ( int argc , char *argv [ ] ) 

    int zaehler; 

    printf ("\n\nEs wurden folgende %d Parameter uebergeben :\n\n", argc ); 

    for ( zaehler = 0 ; zaehler < argc ; zaehler++ ) printf ("%s ", argv [zaehler] );

}

Wie man sehen kann, hat man so die Möglichkeit auf jeden einzelnen Parameter zuzugreifen. Wenn man Beispielsweise das Programm ckurs.exe nennt und es wie unten ausführt, erhält man folgende Auflistung.

Screenshot des ausgeführten Programms

Auffallend ist: das Programm ist immer Parameter argv[0] mit vollem Pfad. argv[1] ist folglich der erste Übergabeparameter, und so weiter. So lassen sich zum Beispiel Aufrufparameter oder andere Startargumente implementieren. So kann man hier einen Parameter -? einführen, durch den eine kleine Hilfe dargestellt wird, wie man an dem kleinen Beispielprogramm sehen kann. Dies kann man natürlich weiter ausbauen, so das mehrere unterschiedliche Parameter existieren.
 

/*
Beispiel für eine Implementierung eines
Aufrufparameters -? der einen Hilfetext darstellt
*/
#include <stdio.h> 

void main ( int argc , char *argv [ ] ) 

    int zaehler; 

    /* Wenn mindestens ein Parameter angegeben wurde alle durchtesten */
    if (argc >1)

      for (zaehler = 1; zaehler<argc; zaehler++)
      {
        /* Wenn ein Parameter -? ist dan Text ausgeben */
        if (argv[zaehler] == "-?")
          {
          printf ("\n\nDas Programm dient zur Demonstration des\n");
          printf ("Parameters -? , welcher diesen Text aufrief \n\n");
          }
      }
    /* wenn kein Aufruf Parameter angegeben wurde, Programm ausführen */
    else printf ("\n\nProgramm wurde ohne -? aufgerufen\n\n" );
}

 
 
 
...das Obligatorische

Autor: Sebastian Cyris PCDBascht@aol.com

Dieser C-Kurs dient nur zu Lehrzwecken! Eine Vervielfältigung ist ohne vorherige Absprache mit dem Autor verboten! Die verwendete Software unterliegt der GPL und unterliegt der Software beiliegenden Bestimmungen zu deren Nutzung! Jede weitere Lizenzbestimmung die der benutzten Software beiliegt, ist zu beachten!