我正在尝试编写一个小程序来通过 execvp 运行 grep。这与我在这里遇到的问题基本相同,但在这种情况下,它仅在我运行 grep 时发生(与 echo、ls、emacs 等都工作正常相反)并且我更改了不正确的 wait() (我相信)。我也尝试在我想查找的文本上使用引号
我的代码:
int main(void) {
int i;
char inputprogram[50];
char vars[50] = "a search.txt";
printf("input grep\n");
fflush(stdout);
fgets(inputprogram,50,stdin);
for(i = 0; i < 50; i++){
if(inputprogram [i] == '\n' ){
inputprogram[i] = 0;
}
}
char *arg [] = {inputprogram, vars , NULL};
printf(">%s<\n", arg[1]);
printf(">%s<\n", arg[0]);
int status = 0;
pid_t child;
(child = fork());
if(child == 0){
printf("execute\n");
execvp(inputprogram, arg);
exit(1);
}
else{
printf("parent waiting...\n");
wait(&status);
}
return EXIT_SUCCESS;
}
搜索.txt:
a
b
c
abc
输入/输出(# 在我输入的行前面,虽然不是输入的一部分):
shell> # ./work
input grep
# grep
>a search.txt<
>grep<
parent waiting...
execute
# a;dlghasdf
# go back
# :(