我正在为我的学校项目工作一个简单的shell我正在尝试传递两个输入参数用于命令(例如:ls / home / -l),因为我只能传递1个atm 。意思是" / home /"没有被执行。我试过这个解决它,但它没有,我不知道该怎么做。
编辑:抱歉 这一行只是为了可视化这些变量:pid = fork(),char * = arg [30],char = input。if(pid != 0) {
waitpid(-1, &stat, 0) ;
}
else {
if(arg[2]!=0) {
char* doubleArgument = (char *) malloc(1 + strlen(arg[1])+ strlen(arg[2]) ) + 1;
strcpy(doubleArgument, arg[1]) ;
strcpy(doubleArgument, " ") ;
strcpy(doubleArgument, arg[2]) ;
execvp(input, doubleArgument) ;
}
else {
execvp(input, arg) ;
printf("Error detected at: %s\n", strerror(errno)) ;
exit(-1) ;
}
我该怎么办?对于任何建议 - 谢谢你:)
答案 0 :(得分:1)
execvp(3): execute file - Linux man page
execv(),execvp()和execvpe()函数提供了一个指向以null结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应指向与正在执行的文件关联的文件名。指针数组必须由NULL指针终止。
未经测试,试试这个:
char* arg[30] ;
char *input ;
/* set arg and input properly */
pid = fork() ;
if(pid != 0) {
waitpid(-1, &stat, 0) ;
}
else {
if(arg[2]!=0) {
char** doubleArgument = malloc(sizeof(char*) * 4) ;
doubleArgument[0] = input ; /* the file name to execute */
doubleArgument[1] = arg[1] ;
doubleArgument[2] = arg[2] ;
doubleArgument[3] = NULL ;
execvp(input, doubleArgument) ;
}
else {
execvp(input, arg) ;
printf("Error detected at: %s\n", strerror(errno)) ;
exit(-1) ;
}
}
他们说你不应该在C.中投出malloc()
的结果
c - Do I cast the result of malloc? - Stack Overflow