【问题标题】:C - error when attempting to pass /bin/ls to execvpC - 尝试将 /bin/ls 传递给 execvp 时出错
【发布时间】:2013-10-20 08:04:06
【问题描述】:

我正在开发一个需要能够使用 execvp 执行某些命令的 C 程序,并且我已经实现了:

execvp(arguments[0], arguments);

其中arguments[] 是一个stings 数组。在大多数情况下,我的实现工作正常 - 例如如果arguments{"touch", "somefile.txt"},则touch 命令按预期调用。

但是,当我尝试将 ls 传递给 execvp,参数类似于 {"/bin/ls", "-a", "."} 时,ls 函数会按预期打印目录列表,但也会打印错误

ls: cannot access GLIBC_2.0: No such file or directory

我不知道如何解决这个警告,谷歌搜索也没有任何结果。有什么想法有什么问题吗?

【问题讨论】:

    标签: c ls execvp


    【解决方案1】:

    execvp 的手册页说:

    execv()execvp() 函数提供了一个指针数组 以 null 结尾的字符串,表示可用于 新程序。按照惯例,第一个论点应该指向 与正在执行的文件关联的文件名。 数组 指针必须以 NULL 指针终止。

    【讨论】:

    • @Dave 有可能在 arguments 数组之后有一个指向字符串 GLIBC_2.0 的指针,在数据部分后面跟着一个纯粹的意外,所以 ls 也试图列出那个。
    猜你喜欢
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多