C Variablen übergabe

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
L@w
Beiträge: 916
Registriert: 24.07.2002 08:12:30

C Variablen übergabe

Beitrag von L@w » 05.10.2003 18:20:36

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.
cu L@w
---

LINUX - because booting is for adding hardware!

Benutzeravatar
remus
Beiträge: 214
Registriert: 03.09.2003 12:06:33
Wohnort: Würzburg
Kontaktdaten:

Beitrag von remus » 05.10.2003 19:00:51

C ist zwar nicht meine Lieblings-Programmiersprache aber das geht so

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");
	}
}
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.

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 05.10.2003 19:23:16

Hallo,
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);
}
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.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
L@w
Beiträge: 916
Registriert: 24.07.2002 08:12:30

Beitrag von L@w » 05.10.2003 19:49:25

danke werd ich mir gleich mal ansehen.
cu L@w
---

LINUX - because booting is for adding hardware!

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 05.10.2003 20:44:30

Hi,

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
}
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"
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 05.10.2003 20:59:34

Hallo,
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"
das ist eine globale Variable zu getopt(), kommt wahrscheinlich irgendwo aus unistd.h.
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!

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 06.10.2003 09:01:44

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....
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 06.10.2003 12:14:06

Definiert ist die Variable ganz bestimmt in einer C-Datei, aber deklariert wird sie in getopt.h, genau wie alle zugehörigen Funktionen.

Antworten