Parameter von der Kommandozeile übernehmen (C)

C

Charon102

Guest
Hallo Leute

Ich kann nur ein bisschen C und möchte mal gerne wissen, wie ich einen Parameter von der Kommandozeile übernehmen kann?

Nehmen wir mal an mein Programm nennt sich "prog" , dann würde ich gerne das Binary z.B mit
prog -switch2 starten.

Switch2 müsste natürlich ne Funktion sein oder ne Variable. Wie prüft man das aus dem Programm?

Gruss Charon102
 
meinst du sowas in der art?

Code:
#include <unistd.h>

...

        int ch;
        int nflag = 0;
        
        while ((ch = getopt(argc, argv, "n")) != -1) {
                switch(ch) {
                        case 'n':
                                nflag = 1;
                                break;
                        default:
                                break;
                }
        }

fuer weitere infos siehe

man 3 getopt
 
Code:
void main(int argc,char** argv)
{
 int i;
 for (i=0;i<argc;i++) printf("%s\n",argv[i]);
}
 
MrFixit schrieb:
OMG, wie schlecht ... (@ pronix.de)

Du willst getopt(3) lesen. (Und die Leute von pronix auch)

Und Du moechtest den ANSI-Standard danach dursuchen und nicht fuendig werden. ;-)
Insofern ist eine solche (simple) Eigenimplementation schon wichtig, fuer den Fall, dass man auf einem System ohne POSIX-Unterstuetzung programmieren muss.

gruss
 
Wenn es auf dem System nicht vorhanden ist, dann kopier ich einfach /usr/src/lib/libc/stdlib/getopt.c in mein Projekt (BSDL sei Dank) und fertig ist mein getopt(3). Kein Grund alles neu zu erfinden. Ist vielleicht ne gute Fingeruebung, aber man will einheitliches Verhalten beim Parameterparsing. Wenn jede Anwendung ein leicht anderes Verhalten beim Parsen von Parameter aufweist, dann artet das fuer den einfachen Anwender zur Hoelle aus.

Standards sind gut :D
 
Ich finde getopt.c ziemlich unpraktisch. Eine eigene lib ist schnell geschrieben und flexibler als getopt.
 
Erstens hindert dich niemand daran, getopt.c nach libgetopt.so zu uebersetzen. Zweitens werden es dir die Anwender danken, wenn dein Parameter-parsing sich anders verhaelt als das von 95% aller F/OSS Software.
 
Hi,

da gibts doch überhaupt keine Standards. Denk mal an dump, find, sed, mount, dd, etc...
Und er sagt ja nicht, dass er einen Parser schreibt, der eine vollkommen andere Syntax erwartet.
Es ist sicher sinnvoll, nicht für jede App neue libs zu schreiben, die es schon gibt. Da ist eine zentrale Verwaltung für das System schon sinnvoller. Aber getopt sehe ich sicher nicht als das Zentrum der Welt an.

CU

Martin
 
@MrFixit: Lese ich da einen Hauch von Sarkasmus zwischen den Zeilen :D

getopt gehört zwar auch nicht unbedingt zu meinen Lieblingen, aber es ist manchmal doch ganz hilfreich.
 
MrFixit schrieb:
Erstens hindert dich niemand daran, getopt.c nach libgetopt.so zu uebersetzen. Zweitens werden es dir die Anwender danken, wenn dein Parameter-parsing sich anders verhaelt als das von 95% aller F/OSS Software.
Ich weiß gar nicht wie man mit getopt standardmäßiges Parsen verwirklichen soll, zumindest wenn man auch die lange Schreibweise --Befehl zusätzlich zu -b anbieten will.
 
Egal, ich habe die Pointer gesehen und bin alls Java-Programmierer gerade so dem Herzinfakt entkommen. Stattdessen habe ich mir eine kleine Klasse geschrieben in der ich ohne Pointer das ganze schön objektorientiert erledigen kann.
 
Zurück
Oben