将shell“*”实现到C程序中

时间:2012-03-26 20:15:43

标签: c linux shell

我的老师让我用execlp做一个程序,它会做同样的事情:
scp * mylogin@mycomputer:/home/mylogin/myfolder

我试过了:
execlp("scp", "scp", "*", "mylogin@mycomputer:/home/mylogin/myfolder", 0)

我发现它不起作用,因为它是将*转换为文件名的shell。

有没有办法让我能做到,我真的不知道如何将所有文件名都放入execlp调用中?

我很抱歉,如果我不清楚,我很难解释:(但我真的在寻找关于“*”如何工作的任何提示,这将很棒:))

3 个答案:

答案 0 :(得分:2)

您可以使用glob(3)执行全局匹配。然后分配一个数组,将匹配的文件名和其他参数放在scp中。在这种情况下,您不希望使用execlp(),而是使用execvp(),因为您现在拥有数组而不是参数列表。

但是,赋值本身是相当愚蠢的:如果你想要shell通配符扩展,请使用system()在shell中执行给定的命令(具有它的所有优点和缺点)。

答案 1 :(得分:1)

据我所知,C标准库不提供扫描目录的功能。在您的平台上可用的 dirent.h,中,有 opendir()函数及其关联。你可以研究一下。

其他答案提到了来自 glob.h, glob(),但这也与平台有关。

答案 2 :(得分:0)

您可以使用glob(3)功能扩展通配符。