繁体   English   中英

如何使用exec()从另一个c程序运行ac程序

[英]how to use exec() to run a c program from another c program

我一直在尝试使用 execvp 来运行 ac 程序,但它似乎总是失败。

来自 main.c

int main() {
char* args[] = {"2", "1"};
    if(execvp("trial.c", args) == -1) {
        printf("\nfailed connection\n");
    }

来自trial.c

int main(int argc, char** argv){
printf("working");
return 1;
}

我想我尝试了所有可能在 exec() 中表示该文件位置的方法,但它总是导致“连接失败”。

execvp的第一个参数需要可执行文件的名称。 您传递的是源文件的名称。 您需要先编译trial.c,然后将编译后的可执行文件的名称传递给execvp

关于execvp的第二个参数,数组中的最后一个元素必须NULL 这就是它知道它到达列表末尾的方式。 此外,按照惯例,程序的第一个参数是程序本身的名称。

所以首先编译trial.c:

gcc -g -Wall -Wextra -o trial trial.c

然后修改main.c中的调用方式:

int main() {
    char* args[] = { "trial", "2", "1", NULL };
    if(execvp("trial", args) == -1) {
        printf("\nfailed connection\n");
    return 1;
}

execvp第一个参数是可执行文件的路径。 您需要为trial.c构建可执行文件并将可执行文件的路径传递给execvp

if(execvp("---path to executable---/ExecTrial", args) == -1) {
    printf("\nfailed connection\n");
}

如果不传递可执行文件路径, execvp将在PATH环境变量中指定的以冒号分隔的目录路径名列表中搜索可执行文件。

如果您尝试在源文件上调用execvp() ,那么这不是该函数所做的。 第一个参数应该是可执行文件的路径。 如果你想运行Trial.c的源程序,你应该先构建(编译等)它。 例如像这样:

$ gcc -o trial trial.c 

然后在新创建的可执行文件而不是源文件上调用execvp()

if(execvp("trial", args) == -1) { //...

trial.c 不是有效的可执行文件。 C 不是脚本或解释语言; 您不能直接运行 C 源文件。 AC 程序必须被编译并链接成可执行文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM