资源简介
Linux操作系统中shell是用户与系统内核沟通的中介,它为用户使用操作系统的服务提供了一个命令行界面,用户在shell提示符下输入的每个命令都由shell先解释,然后传给内核执行。本实验要求用C语言编写一个简单的shell程序,希望达到如下目的:
1、 能够执行外部程序命令,命令可以带参数;
2、 能够执行fg、bg、cd、history、exit等内部命令;
3、 使用管道和输入输出重定向;
4、 支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前运行作业的前/后台状态,以及控制作业的挂起、中止与继续运行;
5、 使用Make工具建立工程;
6、 使用调试器gdb来调试程序;
代码片段和文件信息
//=========================================================================
// 文件名: addBlank.c
// 功能描述:本文件完成在类似“cat>test““>>“作为标
// 志符号,给标志符号的前后加上空格
// 维护记录: 2009-4-12 v1.0 by sxz
//=========================================================================
#include“addBlank.h“
//=============================================================
// 语法格式: char *addBlank(char cmd[40])
// 实现功能: 本文件完成在类似“cat>test // “>“、“>>“作为标志符号,给标志符号的前后加上空格
// 参数: cmd[40]: 从键盘键入的命令行(全局变量)
// 返回值: 添加好空格后的命令行的首地址
//=============================================================
char *addBlank(char cmd[40])
{
char buf[40];
char temp[40];
char temp1[40];
char *p;
int t=0;
int j=0i=0;
strcpy(bufcmd);
if((p=strstr(buf“>>“)) != NULL) //先判断有没有“>>”因为“>“包含于“>>”,为其前后加上空格
{
t=(p-buf)/sizeof(char); //找到“>>“在命令数组中的下标号
for(i=0;i {
strcpy((temp+i)(buf+i));
}
strcpy((temp+t)“ “);
strcpy((temp+t+1)(buf+t));
strcpy((temp+t+2)(buf+t+1));
strcpy((temp+t+3)“ “);
for(i=t+4j=t+2;j {
strcpy((temp+i)(buf+j));
}
if((p=strstr(temp“<“)) != NULL) //再判断命令行中是不是同时有“<”有则给其前后加上空格
{
t=(p-temp)/sizeof(char);
for(i=0;i {
strcpy((temp1+i)(temp+i));
}
strcpy((temp1+t)“ “);
strcpy((temp1+t+1)(temp+t));
strcpy((temp1+t+2)“ “);
for(i=t+3j=t+1;j {
strcpy((temp1+i)(temp+j));
}
strcpy(cmdtemp1);
}
else
{
strcpy(cmdtemp);
}
}
else if((p = strstr(buf“>“)) != NULL)
{
t=(p-buf)/sizeof(char);
for(i=0;i {
strcpy((temp+i)(buf+i));
}
strcpy((temp+t)“ “);
strcpy((temp+t+1)(buf+t));
strcpy((temp+t+2)“ “);
for(i=t+3j=t+1;j {
strcpy((temp+i)(buf+j));
}
if((p=strstr(temp“<“)) != NULL)
{
t=(p-temp)/sizeof(char);
for(i=0;i {
strcpy((temp1+i)(temp+i));
}
strcpy((temp1+t)“ “);
strcpy((temp1+t+1)(temp+t));
strcpy((temp1+t+2)“ “);
for(i=t+3j=t+1;j {
strcpy((temp1+i)(temp+j));
}
strcpy(cmdtemp1);
}
else
{
strcpy(cmdtemp);
}
}
else
{
;
}
return cmd;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 957 2009-12-06 10:00 shell\shell命令解释器测试说明.txt
文件 2498 2009-12-06 10:11 shell\code\addBlank.c
文件 139 2009-04-12 17:14 shell\code\addBlank.h
文件 1197 2009-04-12 17:45 shell\code\check.c
文件 173 2009-04-12 17:36 shell\code\check.h
文件 1526 2009-04-12 17:49 shell\code\history.c
文件 121 2009-04-12 17:46 shell\code\history.h
文件 1598 2009-12-06 09:52 shell\code\init_environ.c
文件 195 2009-04-12 17:50 shell\code\init_environ.h
文件 1104 2009-04-12 18:02 shell\code\isincmd.c
文件 176 2009-04-12 17:58 shell\code\isincmd.h
文件 1371 2009-04-12 18:08 shell\code\keypress.c
文件 165 2009-04-12 17:07 shell\code\keypress.h
文件 4885 2009-04-13 09:06 shell\code\main.c.bak
文件 245 2009-04-12 17:07 shell\code\Makefile
文件 663 2009-04-12 18:18 shell\code\myinclude.h
文件 3744 2009-04-12 18:35 shell\code\myjobs.c
文件 342 2009-04-12 18:19 shell\code\myjobs.h
文件 39 2009-04-12 17:07 shell\code\mysh_profile
文件 866 2009-04-12 18:12 shell\code\my_pipe.c
文件 177 2009-04-12 18:12 shell\code\my_pipe.h
文件 904 2009-12-06 16:31 shell\code\my_strstr.c
文件 153 2009-04-12 18:13 shell\code\my_strstr.h
文件 2519 2009-04-12 18:41 shell\code\redirect.c
文件 282 2009-04-12 18:36 shell\code\redirect.h
文件 834 2009-04-12 18:44 shell\code\save_cmd.c
文件 138 2009-04-12 18:42 shell\code\save_cmd.h
文件 11639 2009-04-12 17:07 shell\code\test
文件 354 2009-04-12 18:46 shell\code\test.c
文件 427 2009-04-12 17:07 shell\code\test1
............此处省略50个文件信息
- 上一篇:C语言读取BMP文件
- 下一篇:中序遍历二叉排序树
评论
共有 条评论