Моят учител ме помоли да направя програма, използваща 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)
функция за разширяване на заместващи символи.