c - 将 shell "*"实现到 C 程序中

标签 c linux shell

我的老师让我用 execlp 编写一个程序,它的功能与:
scp * mylogin@mycomputer:/home/mylogin/myfolder

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

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

有什么方法可以做到吗,我真的不知道如何将所有文件名放入 execlp 调用中?

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

最佳答案

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

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

关于c - 将 shell "*"实现到 C 程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9879132/

相关文章:

c - C 中体系结构 x86_64 的 undefined symbol

通过数组进行 C 编程迭代

linux - 我无法理解 sigaction() 结果

regex - 将文件夹中的所有图像移动到子文件夹,并将文本文件中对这些图像的所有引用更新到它们的新位置?

linux - 如何构建一个文件包含其他文件,通过掩码选择?

c - 结构 printf 使程序停止工作

c - realloc 后如何释放内存

Linux,su,在远程 session 上禁用指纹验证

c# - 从 Mono DLL 返回 List<Object>

linux - 用属性文件中提到的值替换标记的脚本