Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
前景中的Execvp_C_Process_Execvp - Fatal编程技术网

前景中的Execvp

前景中的Execvp,c,process,execvp,C,Process,Execvp,我很难让execvp像系统一样工作 当我使用代码时: int cstatus; /* Exit status of child. */ pid_t cpid; switch (cpid = fork ()) { case -1: printf("fork"); case 0: // child system("./file"); printf("child->"); default: pid_t tpid = wait(&cstat

我很难让execvp像系统一样工作

当我使用代码时:

int cstatus; /* Exit status of child. */
pid_t cpid; 
switch (cpid = fork ()) {
case -1:
    printf("fork");
case 0: // child
    system("./file");
            printf("child->");
default:
    pid_t tpid = wait(&cstatus);
            printf("parent\n");
}
/文件按预期运行并打印子->父级

但当我尝试使用以下命令运行程序时:

int cstatus; /* Exit status of child. */
pid_t cpid; 
switch (cpid = fork ()) {
case -1:
    printf("fork");
case 0: // child
    execvp("file", NULL);
            printf("child->");
default:
    pid_t tpid = wait(&cstatus);
            printf("parent\n");
}
我得到了child->parentparent的输出,该文件在命令提示符下没有显示从file生成的输出


我做错什么了吗?我基本上是想让文件在前台运行,让父级等待文件完成。

部分区别在于execvp不会返回,除非它失败,但系统总是返回。所以,该系统是fork+exec的替代覆盖函数。您还需要考虑当前目录是否在您的路径上。

您错过了休息;在每个案例块的末尾

我忽略了你没有为execvp提供错误的参数

你需要像这样的东西:

.
.
char *argv2[2];
.
.
case 0: // child
    argv2[0] = "file";
    argv2[1] = NULL;
    execvp("file", argv2);
    printf("child->");
    break;
.
.

您还可以添加。要使用PATH环境变量,请执行命令PATH=$PATH:。

检查您的目录是否已被添加到PATH环境变量中

echo $PATH
如果包含文件的目录未列在路径中,则必须通过

PATH=$PATH:/myDirectory

我相信路径就是问题所在,因为深入研究它,我会发现目录错误中没有找到文件。我只是不确定如何将path变量切换到当前目录。这似乎不是问题所在。这个问题是execvp没有在前台运行。我现在认为这与路径变量有关,我弄明白了。这就是路径,只需将文件更改为../file即可。谢谢你。@Frank很有趣。。。在我的机器中,它抱怨第二个参数为null。谢谢你的更新。