我想使用execvp通过我的程序运行命令。提示用户输入命令(退出eof)。
一旦程序有一个命令,它就会让子进程在父进程等待子进程完成时处理命令。
我正在将输入标记为一个char *数组,该数组由变量'i'跟踪。
'i'除了while循环的每次迭代都会不断更改其值。
示例输入:/ bin / ls -l </ p>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#define BUFFER 1024
int main(){
pid_t p;
char* paramList[] = {};
char input[BUFFER];
int i = 0;
char* segments;
printf(">");
while(fgets(input, BUFFER, stdin) != NULL){
if((p = fork()) == 0){
printf("Executing: %s\n", input);
i = 0;
segments = strtok(input, " ");
paramList[i] = segments;
printf("%s%d\n", paramList[i], i);
i++;
while(segments != NULL){
segments = strtok(NULL, " ");
paramList[i] = segments;
printf("%s%d\n", segments, i);
i++;
}
paramList[i] = NULL;
execvp(paramList[0], paramList);
}else{
printf(">");
waitpid(p, NULL, 0);
}
}
return 0;
}
答案 0 :(得分:2)
您并未声明paramList
的尺寸,但是您要为其提供一个空的初始化列表;因此paramList
没有元素。然后你将超过零的元素写入其中,溢出到其他局部变量(如i
)。