【问题标题】:Trying to use 'system()' and 'execv()' function calls尝试使用“system()”和“execv()”函数调用
【发布时间】:2018-09-09 08:08:52
【问题描述】:

我想从另一个 C 程序执行一个 C 程序。 实际上,当控件返回调用程序时,我需要使用system() 函数来实现我的功能。由于我无法使用system() 获得结果,我尝试使用execv() 也没有成功。

下面是我尝试的示例代码

int main(void) {
puts("executing this prog from another prog"); 
return EXIT_SUCCESS; 
}

上面那个叫test1.c

int main(void) {
execv("./test1",NULL); //system("./test1");
puts("!!!Hello World!!!"); 
return EXIT_SUCCESS; 
}

这是 test2.c

使用system(),我收到sh: 1: ./test1: not found 错误,使用execv() 它只是忽略声明并打印!!!Hello World!!!

注意:主要是想知道system()对于我要解决的问题的作用。

【问题讨论】:

  • 你从system得到的错误应该是一个很好的提示。
  • 你把test1.c编译成test1了吗?
  • test1 是否在您当前的工作目录中可执行?
  • system() 不是系统调用,我删除了那个标签。
  • NULL 不是execv() 的有效第二个参数。它需要一个有效的argv 数组。

标签: c linux unix exec


【解决方案1】:

execv的第二个参数必须是一个指向以null结尾的字符串的指针数组,改为:

#include <unistd.h>

int main(void)
{
    char *argv[] = {NULL};
    execv("./test1", argv);
    return 0;
}

如果失败,您可以使用perror 检查错误原因:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    char *argv[] = {NULL};
    if (execv("./test1", argv) == -1) {
        perror("execv");
        exit(EXIT_FAILURE);
    }
    return 0;
}

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2011-01-18
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多