C Variablen übergabe
C Variablen übergabe
hallo,
da ich gerade dabei bin C zu lernen und ich ein kleines Programm schreiben will stellt sich mir gerade die Frage, wie über gebe ich Variblen z.b. wie das Programm ls -l oder df
-m
wie kann ich diese varibalen ins programm übernehmen?
danke schon mal.
da ich gerade dabei bin C zu lernen und ich ein kleines Programm schreiben will stellt sich mir gerade die Frage, wie über gebe ich Variblen z.b. wie das Programm ls -l oder df
-m
wie kann ich diese varibalen ins programm übernehmen?
danke schon mal.
cu L@w
---
LINUX - because booting is for adding hardware!
---
LINUX - because booting is for adding hardware!
C ist zwar nicht meine Lieblings-Programmiersprache aber das geht so
argc enthält die Anzahl der Variablen und argv ist ein String-Array, das die Übergebenen Parameter enthält.
argv[0] zeigt auf den Programmnamen.
Code: Alles auswählen
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i=0; i<argc; i++)
{
printf(argv[i]);
printf("\n");
}
}
argv[0] zeigt auf den Programmnamen.
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
Hallo,
eine weitere Möglichkeit ist die Funktion getopt()
Hier ein Beispiel:
hier werden die Optionen ausgewertet. Bei dem Beispiel ist -x ein Schalter bei dem etwas bestimmten ausgeführt wird und mit -y wird ein Wert gesetzt (hier ein string übergeben). Dieses Argument wird mit argument=optarg ausgelesen. Wenn eine nicht bekannte Option angegeben wird, dann wird '?' zurückgegeben und das Programm beendet sich mit einer Fehlermeldung.
eine weitere Möglichkeit ist die Funktion getopt()
Hier ein Beispiel:
Code: Alles auswählen
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int option;
char *argument=NULL;
while ((option = getopt(argc, argv, "xy:")) >= 0)
{
switch (option)
{
case 'x' :
printf("Option X\n");
break;
case 'y' :
argument = optarg;
break;
case '?' :
return(1);
}
}
printf("Argument: %s\n", argument);
return(0);
}
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
Hi,
aufgrund besserer Performance und Übersicht würde ich grundsätzlich auf die Anzahl der Argumente abfragen:
BeS, wo bekommst Du denn das optarg her? Spezifiziert im Code ist es nicht und ist auch keine mir bekannte Konstante. Sollte es als String gedacht sein? Dann aber wohl "optarg"
aufgrund besserer Performance und Übersicht würde ich grundsätzlich auf die Anzahl der Argumente abfragen:
Code: Alles auswählen
if (argc > 1) {
// was auch immer mit den Argumenten geschehen soll
}
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
Hallo,
optarg zeigt immer auf das passende Argument zur Option, wenn ein Argument übergeben wurde.
Wenn man auch lange Optionen angeben will, dann gibt es getopt_long (nähere infos dazu mit 'man getopt_long')
das ist eine globale Variable zu getopt(), kommt wahrscheinlich irgendwo aus unistd.h.jogix hat geschrieben: BeS, wo bekommst Du denn das optarg her? Spezifiziert im Code ist es nicht und ist auch keine mir bekannte Konstante. Sollte es als String gedacht sein? Dann aber wohl "optarg"
optarg zeigt immer auf das passende Argument zur Option, wenn ein Argument übergeben wurde.
Wenn man auch lange Optionen angeben will, dann gibt es getopt_long (nähere infos dazu mit 'man getopt_long')
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
Hi BeS,
in unistd.h hatte ich auch als erstes geschaut - sieht verdächtig danach aus - kommt aber nicht aus unistd.h. Daher auch meine Frage. Entweder das kommt irgendwie über die includierte features.h oder ist im entsprechenden c-file zu unistd.h definiert, was ich aber ziemlich unsauber fände.
Naja, was soll's....
in unistd.h hatte ich auch als erstes geschaut - sieht verdächtig danach aus - kommt aber nicht aus unistd.h. Daher auch meine Frage. Entweder das kommt irgendwie über die includierte features.h oder ist im entsprechenden c-file zu unistd.h definiert, was ich aber ziemlich unsauber fände.
Naja, was soll's....
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra