用C实现shell
我目前正在用C实现一个shell。 当我尝试运行这样的命令时,会出现问题:用C实现shell,c,shell,unix,fork,pipe,C,Shell,Unix,Fork,Pipe,我目前正在用C实现一个shell。 当我尝试运行这样的命令时,会出现问题: SHELL$: sort < txtFile | grep key 我在子进程中运行sort
SHELL$: sort < txtFile | grep key
我在子进程中运行sort
,在父进程中运行管道右侧的命令
那么,您的shell进程会发生什么变化?父进程是shell。通过在父进程中运行right-side命令,您可以让它接管shell的进程。请记住,exec()将替换当前进程
您将需要fork()两次,并在子进程中执行管道的两侧。父级必须保留shell,然后它将等待()子级退出,然后再显示下一个命令提示符。/*shell的工作原理*/
/* How shell works */
#include<stdio.h>
#include<unistd.h>
main (int argc, char **argv)
{
if (argc < 2)
{
fprintf (stderr, "\nUsage: ./a.out cmd [options]...\n");
}
if (!fork ())
{
argv++;
execvp (argv[0], argv);
}
}
#包括
#包括
主(内部argc,字符**argv)
{
如果(argc<2)
{
fprintf(stderr,“\n用法:./a.out cmd[options]…\n”);
}
如果(!fork())
{
argv++;
execvp(argv[0],argv);
}
}
@KerrekSB感谢您的反馈,但我正试图弄清楚我的代码是怎么回事。非常感谢您的回答,因为您在父进程和子进程中都调用了exec
,所以shell本身不再存在。太好了!!这就是我一直在寻找的信息类型。因此,当您说我需要fork两次时,这意味着在执行第一个命令=sortsort@Useless你能详细说明一下怎么做吗?
/* How shell works */
#include<stdio.h>
#include<unistd.h>
main (int argc, char **argv)
{
if (argc < 2)
{
fprintf (stderr, "\nUsage: ./a.out cmd [options]...\n");
}
if (!fork ())
{
argv++;
execvp (argv[0], argv);
}
}