系统调用跟我学(4)
时间:2007-02-17 来源:PHP爱好者
进程管理相关的系统调用之三
雷镇 ([email protected])
这是本专栏中进程相关的系统调用的最后一篇,用2个实例演示了以往学习的内容。其一是Mini Shell,仿常用的Bash而做,但对其作了大大简化;其二是一个Daemon程序,可以使读者一窥服务器编程的端倪。
1.13 Shell
对Linux不是太陌生的读者都应该对Shell有一定的了解,就是这个程序在我们登陆后自动执行,打印出一个$符号,然后等待我们输入命令。Linux下最常用的Shell应用程序是Bash,绝大部分Linux发行版默认安装的都是它。下面我们也来亲手编写一个Shell程序,这个Shell远远不如Bash复杂,但也能满足我们一般的使用,下面,我们就开始。
首先,给这个Shell取一个名字,不妨就叫做Mini Shell。
Linux系统的命令分为内部命令和外部命令两种,内部命令由Shell程序实现,如cd、echo等,Linux的内部命令数量有限,而且绝大部分都很少用到。而每一个Linux外部命令都是一个单独的应用程序,我们非常熟悉的ls、cp等绝大多数命令都是外部命令,这些命令都以可执行文件的形式存在,绝大部分放在目录/bin和/sbin中。这样一来,我们编程的难度就可以大大下降了,我们只需要实现很有限的内部命令,对于其它的输入,统统当作应用程序来执行即可。
为了简单明了起见,Mini Shell只实现了2个内部命令:
1、cd 用于切换目录,和我们熟悉的命令cd类似,除了没有那么多的附加功能。
2、quit 用于退出Mini Shell。
下面是程序清单:
1: /* mshell.c */
2: #include
1: #include
3: #include
4: #include
5: #include
6: #include
7:
9: void do_cd(char *argv[]);
10: void execute_new(char *argv[]);
11:
12: main()
13: {
14: char *cmd=(void *)malloc(256*sizeof(char));
15: char *cmd_arg[10];
16: int cmdlen,i,j,tag;
17:
18: do{
19: /* 初始化cmd */
20: for(i=0;i<255;i++) cmd='';
21:
22: printf("-=Mini Shell=-*| ");
23: fgets(cmd,256,stdin);
24:
25: cmdlen=strlen(cmd);
26: cmdlen--;
27: cmd[cmdlen]='';
28:
29: /* 把命令行分解为指针数组cmd_arg */
30: for(i=0;i<10;i++) cmd_arg=NULL;
31: i=0; j=0; tag=0;
32: while(i
php爱好者站 http://www.phpfans.net php动态|php基础|php进阶|php模板.
雷镇 ([email protected])
这是本专栏中进程相关的系统调用的最后一篇,用2个实例演示了以往学习的内容。其一是Mini Shell,仿常用的Bash而做,但对其作了大大简化;其二是一个Daemon程序,可以使读者一窥服务器编程的端倪。
1.13 Shell
对Linux不是太陌生的读者都应该对Shell有一定的了解,就是这个程序在我们登陆后自动执行,打印出一个$符号,然后等待我们输入命令。Linux下最常用的Shell应用程序是Bash,绝大部分Linux发行版默认安装的都是它。下面我们也来亲手编写一个Shell程序,这个Shell远远不如Bash复杂,但也能满足我们一般的使用,下面,我们就开始。
首先,给这个Shell取一个名字,不妨就叫做Mini Shell。
Linux系统的命令分为内部命令和外部命令两种,内部命令由Shell程序实现,如cd、echo等,Linux的内部命令数量有限,而且绝大部分都很少用到。而每一个Linux外部命令都是一个单独的应用程序,我们非常熟悉的ls、cp等绝大多数命令都是外部命令,这些命令都以可执行文件的形式存在,绝大部分放在目录/bin和/sbin中。这样一来,我们编程的难度就可以大大下降了,我们只需要实现很有限的内部命令,对于其它的输入,统统当作应用程序来执行即可。
为了简单明了起见,Mini Shell只实现了2个内部命令:
1、cd 用于切换目录,和我们熟悉的命令cd类似,除了没有那么多的附加功能。
2、quit 用于退出Mini Shell。
下面是程序清单:
1: /* mshell.c */
2: #include
1: #include
3: #include
4: #include
5: #include
6: #include
7:
9: void do_cd(char *argv[]);
10: void execute_new(char *argv[]);
11:
12: main()
13: {
14: char *cmd=(void *)malloc(256*sizeof(char));
15: char *cmd_arg[10];
16: int cmdlen,i,j,tag;
17:
18: do{
19: /* 初始化cmd */
20: for(i=0;i<255;i++) cmd='';
21:
22: printf("-=Mini Shell=-*| ");
23: fgets(cmd,256,stdin);
24:
25: cmdlen=strlen(cmd);
26: cmdlen--;
27: cmd[cmdlen]='';
28:
29: /* 把命令行分解为指针数组cmd_arg */
30: for(i=0;i<10;i++) cmd_arg=NULL;
31: i=0; j=0; tag=0;
32: while(i
php爱好者站 http://www.phpfans.net php动态|php基础|php进阶|php模板.
相关阅读 更多 +