【问题标题】:System call execvp is not executing系统调用 execvp 未执行
【发布时间】:2014-12-24 17:52:53
【问题描述】:

大家好,我是系统编程的新手,如果我的疑问非常模糊,请提醒我。

我实际上正在关注一本名为 Linux 系统编程的书,我对 execvp() 系统调用有疑问。正如书中示例给出的那样,我在我的机器上尝试过,下面是下面的示例..

#include<unistd.h>

//int ret;
int main(){

const char *args[] = { "vi", "/home/kidd/hooks.txt", NULL };
int ret;
ret = execv ("/bin/vi", args);
if (ret == −1)
perror ("execvp");

}

我收到一个愚蠢的错误:

error: invalid conversion from ‘const char**’ to ‘char* const*’ [-fpermissive]

我给了一个 const char 数组名称,显然是 const char**。

为什么会出现这个错误?**

【问题讨论】:

    标签: linux-kernel system


    【解决方案1】:

    args 数组不应该是 const char* 类型,它应该只是 char*(就像 main 的 argv 参数只是一个 char*)。所以你的代码应该是这样的:

    #include <unistd.h>
    
    int main() {
     char *args[] = { "vi", "/home/kidd/hooks.txt", NULL };
     int ret;
     ret = execv ("/bin/vi", args);
     if (ret == -1)
        perror ("execvp");
    }
    

    【讨论】:

    • 但是我没有理解逻辑。参数类型应该是 const char** 里面的字符串文字是如何影响类型的。我是 C++ 程序员,如果有错误请注意。
    • 你想要的类型是 const* char*。由于字面量具有 const char* 类型,因此声明数组类型 const char* 会为您提供 const char** 类型。因此,您将数组设为 char* 以获取 const* char* 类型。 linux.die.net/man/3/execvpstackoverflow.com/questions/12517983/…
    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2013-11-27
    • 2014-01-14
    • 2021-11-05
    相关资源
    最近更新 更多