/ / Внедряване на корпуса "*" в програма C - c, linux, shell

Внедряване на корпуса "*" в програма C - c, linux, shell

Моят учител ме помоли да направя програма, използваща execlp, която ще направи същото като:
scp * mylogin@mycomputer:/home/mylogin/myfolder

Опитах :
execlp("scp", "scp", "*", "mylogin@mycomputer:/home/mylogin/myfolder", 0)

Открих, че не работи, тъй като това е черупката, която преобразува * до името на файловете.

Има ли начин да го направя, наистина не знам как бих могъл да получа всички имена на файлове в изходящия разговор?

Съжалявам, ако не съм ясен, просто ми е трудно да обясня: (но аз наистина търся съвети за това как "*" работи, ще е страхотно :)

Отговори:

2 за отговор № 1

Можеш да използваш glob(3) за да извършите мачовото съвпадение. След това разпределете масив, където поставяте съвпадащите имена на файлове и другите аргументи за scp. Няма да искате да използвате execlp() но execvp() в този случай, тъй като вече имате масив вместо списък с аргументи.

Въпреки това задачата сама по себе си е доста глупава: Ако искате разширение на wildcards, използвайте system() който изпълнява дадената команда в черупка (с всичките си предимства и недостатъци).


1 за отговор № 2

Доколкото ми е известно, стандартната библиотека C не предоставя функция за сканиране на директория. в dirent.h, които може да са на разположение на вашата платформа, има opendir () функция и нейните съдружници. Можете да проучите това.

Други отговори споменаха Глоб () от glob.h, но това също зависи от платформата.


0 за отговор № 3

Можете да използвате glob(3) функция за разширяване на заместващи символи.