【发布时间】:2013-02-24 05:45:23
【问题描述】:
我正在尝试编写一个小程序来通过 execvp 运行 grep。这与我遇到的here 的问题基本相同,但在这种情况下,它仅在我运行 grep 时发生(与 echo、ls、emacs 等都正常工作相反)并且我更改了不正确的等待( ) (我相信)。我也尝试在我想查找的文本上使用引号
我的代码:
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;
}
search.txt:
a
b
c
abc
输入/输出(# 在我输入的行前面,虽然不是输入的一部分):
shell> # ./work
input grep
# grep
>a search.txt<
>grep<
parent waiting...
execute
# a;dlghasdf
# go back
# :(
【问题讨论】: