我的老师让我用execlp做一个程序,它会做同样的事情:
scp * mylogin@mycomputer:/home/mylogin/myfolder
我试过了:
execlp("scp", "scp", "*", "mylogin@mycomputer:/home/mylogin/myfolder", 0)
我发现它不起作用,因为它是将*转换为文件名的shell。
有没有办法让我能做到,我真的不知道如何将所有文件名都放入execlp调用中?
我很抱歉,如果我不清楚,我很难解释:(但我真的在寻找关于“*”如何工作的任何提示,这将很棒:))
答案 0 :(得分:2)
您可以使用glob(3)
执行全局匹配。然后分配一个数组,将匹配的文件名和其他参数放在scp中。在这种情况下,您不希望使用execlp()
,而是使用execvp()
,因为您现在拥有数组而不是参数列表。
但是,赋值本身是相当愚蠢的:如果你想要shell通配符扩展,请使用system()
在shell中执行给定的命令(具有它的所有优点和缺点)。
答案 1 :(得分:1)
据我所知,C标准库不提供扫描目录的功能。在您的平台上可用的 dirent.h,中,有 opendir()函数及其关联。你可以研究一下。
其他答案提到了来自 glob.h,的 glob(),但这也与平台有关。
答案 2 :(得分:0)
您可以使用glob(3)
功能扩展通配符。