/ / Implementierung der Shell "*" in ein C-Programm - c, linux, shell

Implementierung der Shell "*" in ein C-Programm - c, linux, shell

Mein Lehrer hat mich gebeten, ein Programm mit execlp zu machen, das dasselbe tut:
scp * mylogin@mycomputer:/home/mylogin/myfolder

Ich habe es versucht :
execlp("scp", "scp", "*", "mylogin@mycomputer:/home/mylogin/myfolder", 0)

Ich habe herausgefunden, dass es nicht funktioniert, da es die Shell ist, die * in Dateinamen konvertiert.

Gibt es eine Möglichkeit, das zu tun, ich weiß nicht wirklich, wie ich alle Dateinamen in den Execlp-Aufruf bekommen könnte?

Es tut mir leid, wenn ich nicht klar bin, es ist schwer für mich zu erklären :( aber ich bin wirklich auf der Suche nach Tipps, wie das "*" funktioniert.

Antworten:

2 für die Antwort № 1

Sie können verwenden glob(3) das Glob-Match durchführen. Weisen Sie dann ein Array zu, in das Sie die entsprechenden Dateinamen und die anderen Argumente in scp einfügen. Sie möchten nicht verwenden execlp() aber execvp() In diesem Fall haben Sie jetzt ein Array anstelle einer Argumentliste.

Die Zuweisung an sich ist jedoch ziemlich dumm: Wenn Sie Shell-Platzhaltererweiterung wünschen, verwenden Sie system() die den gegebenen Befehl in einer Shell ausführt (mit allen Vor- und Nachteilen).


1 für die Antwort № 2

Soweit ich weiß, bietet die C-Standardbibliothek keine Funktion zum Durchsuchen eines Verzeichnisses. Im dirent.h, die möglicherweise auf Ihrer Plattform verfügbar sind, gibt es die opendir () Funktion und ihre Mitarbeiter. Sie können das recherchieren.

Andere Antworten haben erwähnt glob () von glob.h, das ist aber auch plattformabhängig.


0 für die Antwort № 3

Du kannst den ... benutzen glob(3) Funktion zum Erweitern von Platzhaltern.