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