1.shell原理
运用程序替换的原理来实现的,shell自己就是一个进程。
1.获取命令行
2.解析命令行
3.创建子进程(fork)
4.替换子进程(exec)
5.父进程等待子进程退出(wait)
2.shell
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *argv[8];
int argc = 0;
void do_parse(char *buf)
{
int i;
int status = 0;
for (argc=i=0; buf[i]; i++ )
{
if ( !isspace(buf[i]) &&status == 0 )
{
argv[argc++] = buf+i;
status = 1;
} else if ( isspace(buf[i]) )
{
status = 0;
buf[i] = 0;
}
}
argv[argc] = NULL;
}
void do_execute( void )
{
pid_t pid = fork();
switch( pid )
{
case -1:
perror("fork");
break;
case 0:
execvp(argv[0], argv);
perror("execvp");
exit(EXIT_FAILURE);
default:
{
int st;
while ( wait(&st) != pid )
;
}
}
}
int main( void )
{
char buf[1024] = {};
while ( 1 ){
printf("myshell@host: ");
scanf("%[^\n]%*c", buf);
do_parse(buf);
do_execute();
}
return 0;
}
实现效果:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)