2012-03-26 66 views
3

老師讓我做使用execlp一個計劃,將做同樣爲:
scp * [email protected]:/home/mylogin/myfolder
實施殼「*」到C程序

我已經試過:
execlp("scp", "scp", "*", "[email protected]:/home/mylogin/myfolder", 0)

我發現它不起作用,因爲它是將*轉換爲文件名的shell。

有沒有一種方法可以做到這一點,我真的不知道如何將所有文件名都放入execlp調用中?

對不起,如果我不清楚,這只是我很難解釋:(但我真的尋找如何在「*」的作品任何提示將是巨大的:)

+0

謝謝你的傢伙,它幫了我很多:) – neciO 2012-03-28 14:23:31

+0

標記爲已解決。 – AoeAoe 2012-03-29 15:57:05

回答

2

您可以使用glob(3)執行全局匹配。然後分配一個數組,將匹配的文件名和其他參數放到scp中。在這種情況下,您不希望使用execlp(),而是使用execvp(),因爲您現在有一個數組而不是參數列表。

但是,賦值本身是相當愚蠢的:如果你想要shell通配符擴展,使用system(),它在shell中執行給定的命令(具有所有優點和缺點)。

0

您可以使用glob(3)函數來擴展通配符。

1

據我所知,C標準庫沒有提供掃描目錄的功能。在dirent.h,可能在您的平臺上可用,有opendir()函數及其關聯。你可以研究一下。

其他答案有提到glob() from glob.h,但這也是平臺相關的。