模拟实现一个简单shell
程序涉及的关键函数有fgets(),strtok(),execvp(),waitpid(),不知道怎么使用可自行查找使用方法,fgets()函数用于把写入的命令输入到字符数组中,strtok()函数则是把fgets()收集到的字符根据空白格分割到不同的字符数组中,execvp()函数,进行 进程替换,此时子进程不和父进程共用代码,也不新创建新进程,子进程重新在内存中写入execvp()函数要执行的代码,代码结束子进程结束,waitpid()函数用于父进程的进程等待。具体使用代码如下:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <unistd.h>
5 #define LEN 1024
6 #define NUM 32
7
8 int main()
9 {
10 char tem[LEN];
11 char* argv[NUM];
12 while(1)
13 {
14 printf("[root@vm-0-13-centos]# ");
15 fgets(tem,LEN,stdin);
16 tem[strlen(tem) - 1] = '\0';
17 argv[0] = strtok(tem," ");
18
19 int i = 1;
20 while(argv[i] = strtok(NULL," "))
21 {
22 i++;
23 }
24 pid_t id = fork();
25 if(id == 0)
26 {
27 execvp(argv[0],argv);
28 exit(11);
29 }
30 else
31 {
32 waitpid(id,NULL,0);
33 }
34 }
35 return 0;
36 }
运行程序,并输入ls -a -i -l ,输出结果如下: