Zum Inhalt springen

Wozu die Übergabe an die Command Line?


Empfohlene Beiträge

  • Antworten 51
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Geschrieben

Das ist eine alte UNIX-Geschichte, kleine Programme zu haben, die ihre Information über die Kommandozeile erhalten. Durch pipes und Ein-/ausgabeumleitung sowie Kommandosubstitution kann man verschiedene, spezielle Programme zu komplexen Scripts zusammenschreiben, statt für jede einzelne Funktionalität das Rad immer wieder neu zu erfinden.

Hinzu kommt, daß der gesamte Informationsaustausch beim Aufruf stattfindet - da eine Interaktion zur Laufzeit entfällt, ist die Verwendung in scripts überhaupt erst möglich.

"Echte Kommandozeilenbenutzer" :D bilden sich außerdem ein, schneller zum Ziel zu kommen als "Fensterklicker" :( . Stell dir den Unterschied vor, ob du erst einen "Datei öffnen" Dialog aufrufen und durchklicken mußt oder einfach eintippst "prg datei.xy". ;)

Du benutzt ja auch ständig ein Kommandozeilen-Prg ohne es zu merken - die ganzen Einstellungen in MSVC werden dem Programm cl.exe letztlich beim Aufruf als Kommandozeilen-Parameter mitgeteilt: welche Quelltexte, welche include-Pfade, welche Linker-Optionen, welche Symbole wie _DEBUG etwa, etc.pp.

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Schön, die Frage ist doch nur, warum soll ich das machen :confused: ?</STRONG>

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Schön, die Frage ist doch nur, warum soll ich das machen :confused: ?

</STRONG>

Geschrieben

Gut, ich habe verstanden, ich werde nicht drum rum kommen, bzw. sollte es erst agr nicht versuchen. Also los! Nur wie? Du kennst mein Programm ja jetzt in etwa, zumindest in groben Teilen. Was soll ich da wie über die Command Line laufen lassen? (Ich weiß einfach nicht wie ich das anwenden soll, bzw. wofür. Welche Daten soll ich wie über die Command Line in mein Programm einbinden?).

Bine

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Gut, ich habe verstanden, ich werde nicht drum rum kommen, bzw. sollte es erst gar nicht versuchen. Also los! Nur wie?

(...)

Welche Daten soll ich wie über die Command Line in mein Programm einbinden?

Bine</STRONG>

Geschrieben

Wie meinst Du das ich soll keine Eingaben mehr zur laufzeit des Programmes machen :confused: ?

Wie soll ich denn sonst die Eingaben des Users auswerten?

Klar, wir haben Linux Rechner, nicht nur einen. Unser Server ist einer, und ansonsten haben wir noch zwei oder sogar drei, die nur mit Linux laufen, oder mit Linux und Windows. Was findest Du an der Homapge meiner Firma so toll?

Bine

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Wie meinst Du das ich soll keine Eingaben mehr zur laufzeit des Programmes machen :confused: ?

Wie soll ich denn sonst die Eingaben des Users auswerten?

Klar, wir haben Linux Rechner, nicht nur einen. Unser Server ist einer, und ansonsten haben wir noch zwei oder sogar drei, die nur mit Linux laufen, oder mit Linux und Windows. Was findest Du an der Homapge meiner Firma so toll?

Bine</STRONG>

Geschrieben

Vorallem soll der User ja selber entscheiden können welche Dateien usw. er durchsuchen will, und vorallem auf was er sie untersuchen will. Und so geht das doch irgendwie nicht (man, ich bin dafür echt zu doof).

Bine

Geschrieben

du implementierst dir eine funktion, nennen wir sie mal "programmaufruf_pruefen", in welcher du die übergebenen parameter auswertest.

das sieht dann zum beispiel so aus:

Aufruf: <programm> -i <input_datei> -i <input_datei> -s <suchstring>

in der funktion suchst du dann immer nach einem -i; wenn du eins findest, kopierst du den nächsten parameter in eine input variable, usw. wenn du ein -s findest, kopierst du den folgenden sting in deine suchstring variable.

so kann der user dann eine liste von dateien übergeben, welche durchsucht werden sollen, sowie der suchstring, den es zu finden gilt.

was du davon hast?

ganz einfach, unter unix kommt es z.b. oft vor, daß programme in cron jobs eingebunden werden, also immer zu einer bestimmten zeit ausgeführt werden sollen. da das ja auch nachts sein kann, wo niemand da ist, wäre es fatal, wenn das programm auf interaktive eingaben warten würde.

das hätte zur folge, daß das programm auf eine tastatur eingabe wartet und alles bis zum morgen steht, da das programm sich ja nicht beendet und alle nachfolgenden jobs im cron job nicht mehr ausgeführt werden können.

so kannst du im cron job das programm mit bestimmten parametern aufrufen. wenn sich die dateinamen oder pfade ändern, muß man auch nur änderungen im aufruf vornehmen; andererseits müßtest du das im quellcode ändern, was erstens nicht nur aufwendiger, sondern auch gefährlicher sein kann, wenn da jemand drin rummatscht, der keine ahnung hat.

Geschrieben

Ok, bin wieder da (war ebim Arzt). Wenn ich also mit der COmmand Line arbeiten will, dann muss ich main als Parameter (int argc, char *argv[], char *envp[]) übergeben, und die nicht irgendwie durch etwas ersetzten, ja?

Bine

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Und wenn das so ist, woher weiß das Programm das es diese Parameter gibt, und wie kann ich argv die einzelnen Parameter zuweisen? Oder macht er das automatisch?

Bine</STRONG>

Geschrieben

Ja, aber da ich das scheinbar doch noch immer nicht wirklich verstanden habe, hat es mir nicht viel geholfen. Gut, also die Parameter argc und argv werden der Funktion main so übergeben, schön. Klappt auch, habe ich ausprobiert, trotz dieses Eintrags läuft mein Programm wie vorher auch. Nur, wie zum Teufel soll ich denn jetzt die Abfrage nach den Suchbegriffen aus dem Programm auslagern, und das meintest Du doch, sollte ich tun (weil von wegen keine Eingabe während des Programmablaufes). Und was kann ich damit noch alles machen. Hast Du eventuell Texte die mir da weiter helfen können, denn in der MSDN steht zwar drin, wie ich argv usw. zu übergeben habe, und dort finde ich auch Command Line Befehle, aber mehr nicht, und in meinem Buch ist dieses Thema gar nicht erwähnt. *verzweifel*

Bine

PS: Ich glaube auch nicht das ich ein hauruck Programm schreiben soll, ich soll das was ich bisher gelernt habe durch Praxis vertiefen und mir alltäglicher machen, und eben wenn ich etwas nicht weiß, es versuchen zu lösen.

Geschrieben

Schrittchen für Schrittchen ist immmer gut. :)

Versuch doch mal als erstes, ein Wort und einen Dateinamen mitzugeben. Wenn das klappt, such einen Weg, daß die Reihenfolge von Wort und Datei beliebig ist. Danach probier, ob du auch mehrere Wörter, Dateinamen, Verzeichnissemitgeben kannst etc.

Mach das solange, bist du jeden Wert, den der Benutzer bisher zur Laufzeit eingibt, beim Aufruf mitgibst.

Geschrieben

Ja, habe ich, hab ich Dir doch schon in meinem letzten Post gesagt. Ich soll also eine Datei die ich öffnen will und ein Wort welches ich darin suchen will der Funktion main mit als Parameter geben? Wie?

Bine

Geschrieben

da ich denke daß du unter windows arbeitest, hier mal schritt für schritt:

deine main funktion sollte so aussehen:

#define MAXCHARS 1500

// global in diesem beispiel:

char InputFile[MAXCHARS];

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

...

Programmaufruf_pruefen(int argc, char *argv[]);

}

implementier dir eine funktion "programmaufruf prüfen", der du argc und argv übergibst:

 

void Programmaufruf_pruefen(int argc, char *argv[]) {


    // Variablen:


    int cntPara; //Counter für for-Schleife

    char *paramValue2; 

    char *paramValue1;

    // --------------------

    // mindestens ein parameter soll übergeben werden

    // parameter 1 == programmname

    if (argc >= 3) { 

	for (cntPara = 0; cntPara < argc; cntPara++) {

	    if ((paramValue1 = (char*)malloc((strlen(argv[cntPara]) + 1) * sizeof(char)))==NULL) {

		printf("Speicher konnte nicht reserviert werden!\n");

		printf("Programm bricht ab!\n");

		exit(55);

	    }


	    paramValue1 = argv[cntPara];


	    // "-i" kennzeichnen die Input Dateien

	    // wenn paramValue1 eine Input Datei indiziert, so soll der nächste

	    // Parameter an die Input File Liste angehängt werden

	    if (strcmp(paramValue1, "-i") == 0) {

		// diese Bedingung überprüft, ob es tatsächlich auch einen

		// nächsten Parameter gibt

		if ((cntPara+1) < argc) {

		    if ((paramValue2 = (char*)malloc((strlen(argv[cntPara+1]) + 1) * sizeof(char)))==NULL) {

			printf("Speicher konnte nicht reserviert werden!\n");

			printf("Programm bricht ab!\n");

			exit(55);

		    }

		    paramValue2 = argv[cntPara+1];		

		    // der name deiner input datei wird in InputFile abgelegt

		    stringcopy(InputFile, paramValue2, MAXCHARS);

		    printf("\nInputFile: %s", InputFile);

		} else {

		    printf ("Fehler bei Angabe der Input-Datei!\n");

		    exit(88);

		}

	    }


    } else {

	printf("\nInkorrekter Aufruf!\n");


	exit(99);

    }

    // es wird für jede Input Datei und für die Output Datei geprüft, ob die Dateien 

    // mit den benötigten Rechten geöffnet werden können.



}


1.) compilier dein programm

2.) öffne eine dos box (Start->Ausführen->cmd tippen und enter drücken)

3.) wechsel in dein verzeichnis, dahin wo die exe liegt

4.) tipp folgendes ein: a) programmname B) leerzeichen c)-i d) leerzeichen e) dateiname der datei, die du einlesen willst. BSP: meinProgramm.exe -i c:\\meineDatei

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Ja, habe ich, hab ich Dir doch schon in meinem letzten Post gesagt.</STRONG>

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...