/ / Implementácia shell “*” do programu C - c, linux, shell

Implementácia shell "*" do programu C - linux, shell

Môj učiteľ ma požiadal, aby som urobil program pomocou execlp, ktorý bude robiť to isté ako:
scp * mylogin@mycomputer:/home/mylogin/myfolder

Snažil som sa:
execlp("scp", "scp", "*", "mylogin@mycomputer:/home/mylogin/myfolder", 0)

Zistil som, že to nefunguje, pretože je to shell, ktorý konvertuje * na názov súboru.

Existuje spôsob, ako by som to mohol urobiť, neviem, ako by som mohol dostať všetky názvy súborov do volania execlp?

"Je mi ľúto, ak nie som jasné, je to pre mňa len ťažké vysvetliť: (ale ja") som naozaj hľadá nejaké tipy, ako "*" funguje by bolo skvelé :)

odpovede:

2 pre odpoveď č. 1

Môžeš použiť glob(3) vykonať globálnu zhodu. Potom alokujte pole, do ktorého vložíte zodpovedajúce názvy súborov a ostatné argumenty do scp. Nebudete chcieť používať execlp() ale execvp() v tomto prípade, ako teraz máte pole namiesto zoznamu argumentov.

Samotné zadanie je však dosť hlúpe: Ak chcete rozšírenie zástupných znakov, použite system() ktorý vykoná daný príkaz v shell (so všetkými jeho výhodami a nevýhodami).


1 pre odpoveď č. 2

Pokiaľ viem, štandardná knižnica C neposkytuje funkciu na skenovanie adresára. v dirent.h, ktoré môžu byť dostupné na vašej platforme, existujú opendir () a jej spoločníkov. Môžete to skúmať.

Uvádzajú sa aj ďalšie odpovede glob () z glob.h, ale závisí aj od platformy.


0 pre odpoveď č. 3

Môžete použiť glob(3) pre rozširovanie zástupných znakov.