我应该将什么作为结束字符传递给 grep 等系统命令?
what should I pass as end character to system commands such as grep?
void pipe_execute(char all[][MAX_SIZE],int i,int n)
{
if(i==n)
{
execute(all[i-1]);
}
else
{
int fd[2];
char cmd1[100];
pipe(fd);
pid_t pid = fork();
if(pid==0)
{
dup2(fd[1],fileno(stdout));
execute(all[i-1]);
}
else
{
wait(NULL);
dup2(fd[0],fileno(stdin));
pipe_execute(all,i+1,n);
}
}
}
void execute(char cmd[])
{
char *a = strtok(cmd," ");
char *b = strtok(NULL," ");
pid_t pid = fork();
if(pid==0)
execlp(a,a,b,(char*)NULL);
else
{
wait(NULL);
}
}
在这个程序中假设
全部[0] = "ls"
全部[1] = "grep aa"
我=1
n=2
"grep a" 后 grep 的执行没有停止,可能是在等待一些特殊字符,我已经尝试过所有像 '\0'、'\n'、EOF 等但它没有用。我应该发送什么来结束 grep?
它没有停止,因为它正在等待输入。关闭它的 stdin
让它退出。如果它附加到 tty,发送 Ctrl-D
给它。另一种选择是用适当的信号杀死它,但我认为你不需要那样。
void pipe_execute(char all[][MAX_SIZE],int i,int n)
{
if(i==n)
{
execute(all[i-1]);
}
else
{
int fd[2];
char cmd1[100];
pipe(fd);
pid_t pid = fork();
if(pid==0)
{
dup2(fd[1],fileno(stdout));
execute(all[i-1]);
}
else
{
wait(NULL);
dup2(fd[0],fileno(stdin));
pipe_execute(all,i+1,n);
}
}
}
void execute(char cmd[])
{
char *a = strtok(cmd," ");
char *b = strtok(NULL," ");
pid_t pid = fork();
if(pid==0)
execlp(a,a,b,(char*)NULL);
else
{
wait(NULL);
}
}
在这个程序中假设
全部[0] = "ls"
全部[1] = "grep aa"
我=1
n=2
"grep a" 后 grep 的执行没有停止,可能是在等待一些特殊字符,我已经尝试过所有像 '\0'、'\n'、EOF 等但它没有用。我应该发送什么来结束 grep?
它没有停止,因为它正在等待输入。关闭它的 stdin
让它退出。如果它附加到 tty,发送 Ctrl-D
给它。另一种选择是用适当的信号杀死它,但我认为你不需要那样。