資源簡介
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文件
- 下一篇:中序遍歷二叉排序樹
評論
共有 條評論