【问题标题】:Implementing the shell "*" into a C program在 C 程序中实现 shell“*”
【发布时间】:2012-03-26 20:15:43
【问题描述】:

我的老师让我用 execlp 做一个程序,它的作用与以下相同:
scp * mylogin@mycomputer:/home/mylogin/myfolder

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

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

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

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

【问题讨论】:

  • 谢谢你,对我帮助很大:)

标签: c linux shell


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    其他答案提到了 glob.h 中的 glob(),但这也是平台相关的。

    【讨论】:

      【解决方案3】:

      您可以使用glob(3) 函数来扩展通配符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-27
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多