Controlling-shell-Befehlszeile wildcard-Erweiterung in C oder C++

Ich Schreibe ein Programm, foo, in C++. Es ist in der Regel aufgerufen, auf der Kommando-Zeile wie diese:

foo *.txt

Meine main() erhält die Argumente, die in der üblichen Weise. Auf vielen Systemen argv[1] ist buchstäblich *.txt, und ich habe das aufrufen von system-Routinen zu tun, die wildcard-Erweiterung. Auf Unix-Systemen, allerdings ist die shell erweitert den wildcard vor dem Aufruf von meinem Programm, und alle übereinstimmenden Dateinamen werden in argv.

Angenommen, ich wollte einen Schalter hinzufügen, um "foo", die bewirkt, dass es zu Rekursion in Unterverzeichnisse.

foo -a *.txt

verarbeitet alle Textdateien im aktuellen Verzeichnis und alle seine Unterverzeichnisse.

Ich sehe nicht, wie dies geschehen ist, da, durch die Zeit, die mein Programm bekommt eine chance zu sehen, die -a, dann hat shell bereits fertig, der ausbau und die Benutzer *.txt Eingabe ist verloren. Dennoch gibt es gemeinsame Unix-Programme, die funktionieren auf diese Weise. Wie tun Sie es?

In Unix land, wie kann ich das wildcard-expansion?

(Recursing durch Unterverzeichnisse ist nur ein Beispiel. Im Idealfall, ich versuche zu verstehen, die Allgemeine Lösung für die Kontrolle der wildcard-expansion.)

  • BTW--shell-Jokerzeichen genannt "Einheiten" und dass die Funktionalität erhalten werden kann programmgesteuert mithilfe glob (3).
Schreibe einen Kommentar