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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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_Shell - Fatal编程技术网

使用execvp在作用域中声明错误

使用execvp在作用域中声明错误,c,shell,C,Shell,我正在编写一个C程序,它接收用户在控制台(Linux)中编写的输入,用接收到的参数创建一个向量,并使用子Shell执行它们。我在尝试编译时收到了所有这些错误/警告。 可能它与子Shell的创建有关,但我不确定。 怎么了 int main(int argc, char *argVector[]) { char command[100]; int status, pid; while (1) { GetCommand( command );

我正在编写一个C程序,它接收用户在控制台(Linux)中编写的输入,用接收到的参数创建一个向量,并使用子Shell执行它们。我在尝试编译时收到了所有这些错误/警告。 可能它与子Shell的创建有关,但我不确定。 怎么了

int main(int argc, char *argVector[])
{
    char command[100];
    int status, pid;

    while (1)
    {   
        GetCommand( command );
        if(strcmp(command, "quit\n") == 0) break;
        if ( ( pid = fork() ) < 0 )
        {
            printf("%s\n", "Erro ao realizar fork");
            break;
        }       
        if( pid == 0 )
        {
            makeArgVector(command,argVector);
            if(execvp(argvector[0],argVector) < 0 ) 
            {
                printf("Erro ao executar comando");
                break;
            }
        }else
            wait(&status);
    }
    return 0;
}
Wait()在Wait.h文件中声明。所以我们必须像下面那样包含这个头文件,这样编译器才能从头文件中得到声明

#include <sys/wait.h>
#包括

您包括哪些标题?为什么列表中没有包含
?请发布代码,这样我们可以编译它,然后帮助您更正语法错误。当前发布的代码缺少一些内容,例如所需的头文件所需的
#include
语句
if(execvp(argvector[0],argvector)<0){printf(“Erro ao executar comando”);break;}
1)错误消息应该输出到
stderr
,而不是
stdout
2)除非未能启动其他进程,否则
exec*()
函数都不会返回。所以所需要的就是:
execvp(argvector[0],argvector);perror(“execvp失败”);退出(退出失败)请注意,
makeArgVector()
只提供了与
main()
程序(命令行参数)的参数相同的空间来处理。这充其量是脆弱的,尤其是当您不告诉它必须使用多少空间时。
#include <sys/wait.h>