Steuerung von LPT Grundverständnis
-
Hallo Leute,
beschäftige mich seit kurzem mit C, leider bin ich kein Profi also brauche ein bißchen Unterstützung.
Meine fragen sind- welchen Zweck haben Var. argc und der Zeiger argv. (Zeile 6, Bezeichnung von Schnittstellen für bei argv??)
2)Was bewirkt genau argc!=2 (Zeile 10)
**********************************************************************
1#include <stdio.h>
2#include <string.h>
3#include <sys/io.h>
4#define D_LPT1_DATA 0x378
5#define D_LPT2_DATA 0x278
6int main (int argc, char *argv[])
7{
8int I_port;
9char *pC_port;
10if (argc!=2)
11{ printf("\nusage: %s <LPT1|LPT2>\n\n", argv[0]);
12 exit(1);
13 }
14
15pC_port = argv[1];
16if (strncmp (pC_port, "LPT2", 4)==0)
17{ I_port =D_LPT2_DATA;}
18 else { I_port=D_LPT1_DATA;}
19
if (ioperm (I_port,3,1)!=0)
{ perror ("ERROR: kann die LPT Schnitschtelle nicht finden");
return (-1);}
printf ("\n Press C to stop.\n",pC_port);
while (1==1) { outb(0x00, I_port);printf(".");
fflush(stdout);sleep(1);outb(0xff, I_port);
printf(".");
flush(stdout);
sleep(1);}
return(0);}
- welchen Zweck haben Var. argc und der Zeiger argv. (Zeile 6, Bezeichnung von Schnittstellen für bei argv??)
-
In argc steht die Anzahl der Argumente, die du beim Programmaufruf mitgibst.
argv ist ein Pointer auf einen String, in dem die entsprechenden Argumente drin stehen.if (argc != 2) ist also ne Abfrage, in der auf die Anzahl der übergebenen Parameter geprüft wird.
-
Du kannst an ein Programm in der Kommandozeile Parameter übergeben, sogenannte
kommandozeilenparameter.
In argc steht die Anzahl der übergebenen Parameter, in argv sthet was übergeben wurde
Bsp:C:\Programm.exe Bernd
das Programm wurde gestartet und ein Parameter übergeben "Bernd" das heisst in
argv[1] steht "Bernd" und argc wäre 2 weil ein parameter + programmaufruf übergeben wurden.argc!=2 bedeutet, führe aus wenn nicht 2 parameter übergeben wurden.
mfg hohesC
-
hohesC schrieb:
richtig wäre:
int main(char argv,int *argc) { ... }
Ist argv nicht ein Pointer? Und argc keiner? Oder bring ich das mal wieder durcheinander?
-
ja ich hab mich grad vertan sorry.
-
@Schaubert was hat deine Frage mit Steuerung von LPT(Line Printern) zu tun?
mfg hohesC
-
@HohesC
In argc steht die Anzahl der Parameter + dem Aufruf. In argv[0] steht also noch der Aufruf des Programms drin. In deinem Beispiel wäre das "C:\PROGRAMM.EXE".Richtig siehts übrigens so aus:
int main(int argc, char *argv[]) { ... }
Siehe auch diesen Thread dazu ;): http://www.c-plusplus.net/forum/viewtopic.php?t=94816
-
@AJ: Ist mir klar, deswegen hab ich ja gesagt das argv[1] Bernd ist, ich dachte das klar ist das argv[0] der Programmaufruf ist(logischerweise).
mfg hohesC
-
hohesC schrieb:
@AJ: Ist mir klar, deswegen hab ich ja gesagt das argv[1] Bernd ist, ich dachte das klar ist das argv[0] der Programmaufruf ist(logischerweise).
mfg hohesC
Für Dich, andere eingefleischte C-Progger und mich ist das logisch, aber für jemanden, der nicht weiß was argc und argv ist, ist das absolut nicht logisch. Mir war auch klar, dass Du das weißt, aber für andere ist die Info sicherlich auch wichtig ;).
Das einzige was ich konkret bei dir bemängelt habe, war der Wert von argc.
-
@AJ: schon verbessert!
das kommt halt davon wenn man das schnell abtippt.
-
hohesC schrieb:
@AJ: schon verbessert!
das kommt halt davon wenn man das schnell abtippt.Aber noch nicht ganz richtig (ich bin heute aber wieder penibel *hehe*). Dein letzter Satz stimmt noch nicht. Es muss genau 1 Parameter übergeben werden bei der Abfrage argc != 2.
-
naja der Programm aufruf stellt auch ein parameter da!
-
hohesC schrieb:
naja der Programm aufruf stellt auch ein parameter da!
Ansichtssache ;), aber OK.