当前位置:文档之家› c语言模拟shell命令行解释程序

c语言模拟shell命令行解释程序

c语言模拟shell命令行解释程序
c语言模拟shell命令行解释程序

北京联合大学

《操作系统课程设计》实验一:命令行解释程序

学院:信息学院专业:计算机科学与技术

课程:操作系统班级: 1 1 0 3 B 姓名:傅笔贵学号: 2009080305302

2014年7 月10 日

一.采用的数据结构说明

字符数组:

本程序中包含的字符数组有:

filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。

filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。

oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。

newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。

Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。

File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。

Word[100]:在Cdis()中存放用户要回显的字符串。

二.源程序清单、注释和流程图

(1)流程图

(2)源程序和注释

#include

#include

#include

#include

#include

#include

#include

int flag=1;

char ch[8];//存储文件读取内容的中间变量

FILE *fp;

FILE *fp1;

char filename1[20];/*复制文件候存放的原文件名*/

char filename2[20];/*复制文件候存放的目标文件名*/

char oldname[20];/*用来存放移动文件的源文件名*/

char newname[20];/*用来存放移动文件的目标文件名*/

void start_copy(char *filename1,char *filename2)

/*文件复制函数,可以实现文本和图片的复制*/

{

if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"wb"))==NUL L)

/*源文件或目标文件打开失败则无法进行复制*/

{

printf("can't open the source file!\n");

exit(0);

}

else

{

fread(ch,1,8,fp);//一次读取八个字节的字节流,存放到ch字符数组里

while (!feof(fp))//没读取到文件尾部时,持续读取

{

fwrite(ch,1,8,fp1);//写到目标文件里

fread(ch,1,8,fp);//继续读取

}

fclose(fp);//关闭指针,释放内存

fclose(fp1);

}

}

void Cend()

{

flag=0;//将循环条件flag=1变为0来结束循环,结束程序

}

void Cdir()

{

/*目录显示函数,除了调用Cmd没有更好的

解决办法,是本程序的遗憾.*/

system("cmd.exe /b dir");

}

void Ccopy()//文件复制主函数

{

scanf("%s%s",&filename1,&filename2);//获取源文件和目标文件名start_copy(filename1,filename2);//传参到复制函数

}

void Cerase()//删除文件函数

{

char File[20];//文件名存储

scanf("%s",&File);//获得文件名

if(remove(File)==0)//删除成功remove返回0

{

printf("Remove %s Successfully!\n",File);

}

else

{

perror("Failed!");

}

}

void Cdis()

{

char Word[100];//存放用户输入的字符串

getchar();//吸取第一个不必要的空格字符

gets(Word);//获得用户的字符串内容

printf("---------E---C---H---O-------------\n");

puts(Word);//显示用户的字符串内容

}

void Cmv()//移动或重命名文件函数

{

scanf("%s%s",&oldname,&newname);//用来获取用户输入的两个文件名rename(oldname,newname);

}

int main()

{

//定义判定字符

char cdir1[]="Cdir";

char cdir2[]="cdir";

char ccopy1[]="Ccopy";

char ccopy2[]="ccopy";

char cerase1[]="Cerase";

char cerase2[]="cerase";

char cdis1[]="Cdis";

char cdis2[]="cdis";

char cend1[]="Cend";

char cend2[]="cend";

char clr1[]="Cclr";

char clr2[]="cclr";

char cmv1[]="Cmv";

char cmv2[]="cmv";

char cuname1[]="Cuname";

char cuname2[]="cuname";

while(flag)

{

char Cho[100]={0};

char Cho2[6];

int num=0;

/*主菜单*/

printf("-----------------------------------\n");

printf("---------M E N U----------\n");

printf("-----------------------------------\n");

printf("Cdir . Show the Detail of Dir and files.\n");

printf("Ccopy . Copy the file.\n");

printf("Cerase . Erase(Delete) the file.\n");

printf("Cdis . The Echo of your input words\n");

printf("Cclr . Clear the Screen.\n");

printf("Cmv . Move Or Rename the file.\n");

printf("Cuname . Show CPU Info.\n");

printf("Cend . Quit.\n");

printf("\n");

printf("\n");

printf("Please Enter The Command:");

scanf("%s",&Cho2);

/*下面这一段将对用户输入的字符串第一个空格前的

内容进行判定,确定功能号,在转入对应的Case分支

决定用户本次所使用的功能.*/

if(strcmp(Cho2,cdir1)==0||strcmp(Cho2,cdir2)==0)//首字母大小写均可识别

{

num=1;

}

else if(strcmp(Cho2,ccopy1)==0||strcmp(Cho2,ccopy2)==0)

{

num=2;

}

else if(strcmp(Cho2,cerase1)==0||strcmp(Cho2,cerase2)==0)

{

num=3;

}

else if(strcmp(Cho2,cdis1)==0||strcmp(Cho2,cdis2)==0)

{

num=4;

}

else if(strcmp(Cho2,cend1)==0||strcmp(Cho2,cend2)==0)

{

num=5;

}

else if(strcmp(Cho2,clr1)==0||strcmp(Cho2,clr2)==0)

{

num=6;

}

else if(strcmp(Cho2,cmv1)==0||strcmp(Cho2,cmv2)==0)

{

num=7;

}

else if(strcmp(Cho2,cuname1)==0||strcmp(Cho2,cuname2)==0)

{

num=8;

}

else

{

printf("ERROR COMMAND,TRY AGAIN!\n");

}

switch(num)

{

case(1):Cdir();break;//功能1,启动Cmd调用dir \b检查目录

case(2):Ccopy();getchar();break;//功能2,复制一个文件到另一个目录case(3):Cerase();break;//功能3,删除一个指定路径的文件

case(4):Cdis();break;//功能4,回显用户输入的字符串内容

case(5):Cend();break;//功能5,结束程序

case(6):system("cls");break;//功能6,清屏

case(7):Cmv();break;//功能7,移动一个文件,如果路径不变只改变名字,则变为重命名功能

case(8):system("systemInfo");break;//功能8,显示计算机详细信息

}

}

}

三.Windows命令与Linux命令的不同

本程序的功能有8个,其中Cdir和Linux下的ls基本区别不大,但是ls 后面有很多参数,这是和Windows在cmd下调用dir不太一样的地方。

Ccopy和Linux下的Cp命令没有什么区别。

Cerase和Linux的rm是有区别的,Linux删除的文件是无法补救的,因此在删除之前会有提示是否要真的删除,rm –r可以连同文件的子目录都删除,这点和windows下的rmdir类似。

Cdis是我自定的回显函数,和Linux的Echo一样。

Cend就是单纯的退出程序,和Linux的Logout一样。

Cclr是清屏功能,就是Linux下的clear指令。

Cmv是移动文件指令,如果路径不做变化,那么就会变成重命名的功能,和Linux的mv功能一样,移动的时候子目录也会一起移动。

四.收获体会

C语言一直都是十分经典的编程语言,本次操作系统实训让我重新巩固了下曾经学过的C语言知识,虽然只是实现简单的Shell模拟,而且仅仅是少数功能的模拟,也耗费了我很多的时间,而且为了能更好的符合要求,我还和同学们一起讨论得到了最好的结果,在训练了编程语言的同时,也增加了和同学之间的交流能力,还更好的理解了Shell指令的工作原理,是个一举三得的实训课程!

未来还有一周的实训课程,而且内容会更加困难,我想这会是一次非常好的机会来加深对操作系统这门课的理解,继续努力!

《C程序设计语言》样卷

韩山师范学院2011年专升本插班生考试样卷 计算机科学与技术专业高级语言程序设计试卷(A卷) 一、填空题(每空1分,共10分) 1.C程序的基本单位是________。 2.C语言源程序文件的后缀是________。 3.C语言中的标识符由________、________和字母组成。 4.设y为float型变量,执行表达式y=6/5之后,y的值是________。 5.在C语言中,要求运算量必须是整型的运算符是___________。 6.如果函数值的类型与返回值的类型不一致时,应该以___________为准。7.已知int a=8,*p=&a;,则*p的值是___________。 8.把一些不同类型的数据作为一个整体来处理时,常用___________。9.若x=2,y=3,则x|y<<2的结果是___________。 二、单项选择题(每小题1.5分,共30分) A.顺序结构、选择结构、循环结构B.递归结构、循环结构、转移结构C.嵌套结构、递归结构、顺序结构D.循环结构、转移结构、顺序结构2.在一个C语言的源程序中,以下叙述正确的是()。

A.必须有除主函数外其他函数B.可以有多个主函数 C.必须有一个主函数D.可以没有主函数 3.以下叙述正确的选项是()。 A.C语言的源程序不必通过编译就可直接执行 B.C语言中的每条语句最终都将被转换成二进制的机器指令 C.C语言程序经编译形成的二进制代码可以直接执行 D.C语言中的函数不可以单独进行编译 4.算法是指为解决某个特定问题而采取的正确且有限的步骤,下面不属于算法的5个特性的是( )。 A.有零个输入或多个输入B.高效性C.有穷性D.确定性5.以下能正确定义且赋初值的语句是( )。 A.int n1=n2=10; B.char c=32; C.float f=f+1.1; D.double x=12.3E2.5 6.有以下程序: main() { char a='a',b; printf("%c",++a); printf("%c\n",b=a++); } 程序运行后的输出结果是( )。 A.bb B.bc C.ab D.ac 7.以下程序段的输出结果是( )。 int a=1234; printf("%2d ",a); A.12 B.34 C.1234 D.提示出错 8.有以下程序:

windows文本命令窗口help文档

C:\Users\zwh>help 有关某个命令的详细信息,请键入HELP 命令名 ASSOC 显示或修改文件扩展名关联。 ATTRIB 显示或更改文件属性。 BREAK 设置或清除扩展式CTRL+C 检查。 BCDEDIT 设置启动数据库中的属性以控制启动加载。CACLS 显示或修改文件的访问控制列表(ACL)。 CALL 从另一个批处理程序调用这一个。 CD 显示当前目录的名称或将其更改。 CHCP 显示或设置活动代码页数。 CHDIR 显示当前目录的名称或将其更改。 CHKDSK 检查磁盘并显示状态报告。 CHKNTFS 显示或修改启动时间磁盘检查。 CLS 清除屏幕。 CMD 打开另一个Windows 命令解释程序窗口。COLOR 设置默认控制台前景和背景颜色。 COMP 比较两个或两套文件的内容。 COMPACT 显示或更改NTFS 分区上文件的压缩。CONVERT 将FA T 卷转换成NTFS。您不能转换 当前驱动器。 COPY 将至少一个文件复制到另一个位置。 DA TE 显示或设置日期。 DEL 删除至少一个文件。 DIR 显示一个目录中的文件和子目录。 DISKCOMP 比较两个软盘的内容。 DISKCOPY 将一个软盘的内容复制到另一个软盘。DISKPART 显示或配置磁盘分区属性。 DOSKEY 编辑命令行、调用Windows 命令并创建宏。DRIVERQUERY 显示当前设备驱动程序状态和属性。 ECHO 显示消息,或将命令回显打开或关上。ENDLOCAL 结束批文件中环境更改的本地化。 ERASE 删除一个或多个文件。 EXIT 退出CMD.EXE 程序(命令解释程序)。 FC 比较两个文件或两个文件集并显示它们之间的不同FIND 在一个或多个文件中搜索一个文本字符串。FINDSTR 在多个文件中搜索字符串。 FOR 为一套文件中的每个文件运行一个指定的命令。FORMAT 格式化磁盘,以便跟Windows 使用。 FSUTIL 显示或配置文件系统的属性。 FTYPE 显示或修改用在文件扩展名关联的文件类型。GOTO 将Windows 命令解释程序指向批处理程序 中某个带标签的行。 GPRESULT 显示机器或用户的组策略信息。 GRAFTABL 启用Windows 在图形模式显示扩展字符集。

C程序设计语言 (第二版) 课后答案第一章

Chapter 1 Exercise 1-1 Run the “hello world” program on your system. Experiment with leaving out parts of the program, to see what error message you get. #include int main() { printf("hello, "); printf("world"); printf("\n"); return 0; } Exercise 1-2 Experiment to find out what happens when printf’s argument string contains \c, where c is some character not list above. Exercise 1-3 Modify the temperature conversion program to print a heading above the table. #include int main() { float fahr, celsius; float lower, upper, step; lower = 0; upper = 300; step = 20; fahr = lower; printf("Fahrenheit temperatures and their centigrade or Celsius equivalents\n"); while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } return 0; }

习题10解答

习题10 10.1何谓操作系统与用户的接口?有哪几种类型?其主要的功能是什么? 操作系统与用户接口的目标就是提供一个友好的用户访问操作系统的接口,使得用户能将自己的要求告诉操作系统,同时也要构造一个反向接口使系统能够利用该接口告知用户目前的工作情况。 一般,操作系统为用户提供两种接口:一类用于程序一级的编程接口,供用户程序和系统程序调用操作系统的服务和功能,由一组系统调用(system call)和高级语言库函数组成。另一类是用于作业(或功能)控制一级,供用户组织和控制自己的作业运行,其中又分为脱机用户和联机用户两种不同的接口。前者对应命令或脚本(脱机);后者体现为交互式联机命令行、菜单式或GUI图形用户接口(联机)。 10.2命令文件是什么?它完成什么功能?如何组织命令文件? 把所需执行的一系列命令组装成文件,然后用文件名作为命令名执行所需命令序列,从而自动控制作业的运行,例如,MS-DOS操作系统中的批处理(扩展名为BA T),用户可预先把一系列命令组织在BA T文件中,一次建立,多次执行。 例如: echo on file 25 buffers 20 remark 设置有关文件与缓冲区 copy a:\data\*.exe d:\fox\data > null edit main.prg foxplus echo off 有的操作系统还支持在命令文件使用循环、分支、转移、判别等语法结构,可以写出带形式参数的批命令文件,甚至允许嵌套形式调用其他命令文件。当带形式参数的批命令文件执行时,可用不同的实际参数去替换,因而,此类批命令文件便可以执行不同的命令序列,大大增强了命令接口的处理能力。例如,UNIX和Linux的Shell不但是一种交互型命令解释程序,也是一种命令级程序设计语言解释系统,它允许用户使用Shell简单命令、位置参数和控制流语句编制带形式参数的批命令文件,称作Shell文件或Shell过程,Shell可以自动解释和执行该文件或过程中的命令。 命令文件方式实现了联机状态下的批处理操作,对一些重复运行的作业非常有用。 10.3试说明命令解释程序的主要功能。 命令解释程序是操作系统最重要的系统程序,其主要功能是读人作业控制卡或接收用户输入的命令行,作出相应的解释并执行该命令提出的对作业的处理要求。命令解释程序通常会保存一张命令名字(动词)表,其中记录着所有操作命令及其处理程序的人口地址或相关信息。当一个新的批作业被启动,或新的联机用户登录进系统时,系统就自动地执行命令解释程序(详见第2章有关作业控制部分的讨论)。 10.4什么是系统调用?它的主要功能是什么?请举例说明Linux系统调用的使用。 系统调用是操作系统提供给用户编程的惟一接口,即用户在程序中调用操作系统所提供的相关功能,动态请求和释放系统资源,完成与计算机硬件部分相关的工作以及控制程序的

习题07_Shell编程

习题07_Shell编程 一、单选 1. 下面哪个命令是用来定义shell的全局变量( D )。 A. exportfs B. alias C. exports D. export 2.在Shell脚本中,用来读取文件内各个域的内容并将其赋值Shell变量的命令是(D )。 A. fold B. join C. tr D. read 3. 当字符串用双引号(’’)括起来时,SHELL将(C )。 A. 解释引号内的特殊字符 B. 执行引号中的命令 C. 不解释引号内的特殊字符 D. 结束进程 4. 以下哪个环境变量表示当前路径( B )。 A. PATH B. PWD C. HOME D. ROOT 5. shell不仅是(用户命令的解释器),它同时也是一种功能强大的编程语言,(bash )是Linux的缺省shell。 6. 编写的Shell程序运行前必须赋予该脚本文件(执行)权限。 7. 对于Shell脚本程序,若输入参数数量多于9个,则程序遍历每个参数可通过使用(shift )命令实现。 8. 为脚本程序指定执行权的命令及参数是( chmod a+x filename )。 9. 在shell编程时,使用方括号表示测试条件的规则是:方括号两边必有(空格)。 10. 输入了Shell命令的部分字符后按( tab )键可补全其余部分。 11.改变命令提示符的环境变量是(PS1 )。 11. grep -E '[Hh]enr(y|ietta)' file的功能是:(在文件File中查找Henry、henry、Henrietta或henrietta)。 12. 如下为命令终端下的一个截图: 则,以下两句的执行结果是:(the home path is $HOME )。 path=‘the home path is $HOME’ echo $path 13. 以下为程序名为prog的程序内容。则sh prog a b c d的执行结果为( C )。 set A B C D shift shift echo $1 三、简答 1. 下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。

(完整版)C程序设计语言复习题(试题及答案版)

一.填空题 26.C#源程序的后缀名为______.cs________。 26.C#中每个int 类型的变量占用____4___个字节的内存。 26.C#的每行语句以________分号_______结尾。 26.布尔型的变量可以赋值为关键字_____true__________或_____false_________。 26.如果int x的初始值为5,则执行表达式x - =3之后,x的值为_____2_________。 26.do...while语句在执行循环体_____之后________测试语句是否满足循环条件。 26.关键字_______class________表示一个类的定义。 26.如果一个类包含一个或多个抽象方法,它是一个_________抽象_____________类。 26.try块运行后,总是会执行_________finally_____________块中的代码。 26.一个数组如果有两个索引值,那么它是__________二维__________数组。 二.单项选择题 1.在对SQL Server 数据库操作时应选用()。 A、SQL Server .NET Framework 数据提供程序; B、OLE DB .NET Framework 数据提供程序; C、ODBC .NET Framework 数据提供程序; D、Oracle .NET Framework数据提供程序; 2.下列选项中,()是引用类型。 A、enum类型 B、struct类型 C、string类型 D、int类型 3.C#的数据类型有() A、值和调用类型; B、值和引用类型; C、引用和关系类型; D、关系和调用类型 4.下列描述错误的是() A、类不可以多重继承而接口可以; B、抽象类自身可以定义成员而接口不可以; C、抽象类和接口都不能被实例化; D、一个类可以有多个基类和多个基接口; 5.下列关于构造函数的描述正确的是() A、构造函数可以声明返回类型。 B、构造函数不可以用private修饰 C、构造函数必须与类名相同 D、构造函数不能带参数 6.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; 那么myArray3[2][2]的值是( )。 A、9 B、2 C、6 D、越界 7.接口是一种引用类型,在接口中可以声明(),但不可以声明公有的域或私有的成员变量。 A、方法、属性、索引器和事件; B、方法、属性信息、属性; C、索引器和字段; D、事件和字段; 8.在https://www.doczj.com/doc/2a18216987.html,中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误 的是()。 A、insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行; B、ExecuteNonQuery()方法返回执行Sql语句所影响的行数。 C、Select操作的Sql语句只能由ExecuteReader()方法来执行; D、ExecuteReader()方法返回一个DataReder对象; 9.Winform中,关于ToolBar控件的属性和事件的描述不正确的是( )。 A、Buttons属性表示ToolBar控件的所有工具栏按钮 B、ButtonSize属性表示ToolBar控件上的工具栏按钮的大小,如高度和宽度 C、DropDownArrows属性表明工具栏按钮(该按钮有一列值需要以下拉方式显示)旁边是否显示下箭 头键 D、ButtonClick事件在用户单击工具栏任何地方时都会触发

UNIX命令

入门介绍和常用命令 如果文件系统磁盘空间不足,则可能出现停止服务等反常现象。 建议各现场系统环境维护人员要定期检查一下Domain所在文件系统的磁盘空间是否足够。命令: df -k df -m df -g等。 历史: BSD,SYSTEM V 主流商业版本 SUN SOLORIS IBM AIX HP-UX Tru64 UNIX LINUX 登录和用户管理 进入系统 login: passwd: 字符方式: 字符终端(console,tty) telnet,term-tools 图形方式(x-window protocal): 从主机登录; 图形终端工具(reflection,hummingbird,cygwin,etc.) Change passwd: $ passwd old password: new password: reenter new password: chsh $ chsh /bin /sh /bin /csh User informaiton defined in /etc/passwd,readonly for ordinary users.

$ man cmd $ docsearch $ wheris cmd $ which cmd Command Search Path $ echo $PATH 查看自己的用户名 $ whoami who ,w 查看当前谁在系统上 users, u 查看当前系统的用户 id 看登录用户 finger user 查看user 的信息 ps 显示当前进程状况 ps –u user 显示用户名为user 的进程状况 进程调度 后台运行 $ cmd & $ cmd1;cmd2;cmd3 $ cmd1&&cmd2&&cmd3 $ cmd1||cmd2||cmd3 从后台转到前台 $ jobs #查找 $ fg %n 定时任务 at,cron $ at time cmd $ crontab –l $ crontab –e $ crontab user # root can edit other users? crontab 重定向和管道 stdin,stdout,stderr $ cmd >file $ cmd

命令行解释程序报告

北京联合大学《操作系统课程设计》实验一:命令行解释程序 学院:信息学院 专业:计算机科学与技术 班级:计算机1203B 姓名:谢申兵 学号:2012080332071 2015年7月18日

一.采用的数据结构说明 字符数组: 本程序中包含的字符数组有: filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。 filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。 oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。 newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。 Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。 File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。 Word[100]:在Cdis()中存放用户要回显的字符串。 二.源程序清单、注释和流程图 (1)流程图

程序开始 输入指令 Num=1 Num=2 Num=3 Num=4 Cdir? Ccopy? Cerase? Cdis? Num=5 Cclr? Cmv? Num=6 Num=7 Cuname? Cend?Num=8 Case? 传入两个参数来复制文件 删除一个带绝对路径的指定 文件 回显输入的字 符串 清屏 移动或者重命 名文件显示计算机详 细信息 退出程序 调用Cmd 里的dir 查看目录 输入两个路径 输入一个绝对路径和文件名 不带空格的字符串 程序结束 是 否 否 否 否 否 否 否 否 是 是 是 是 是 是 是 4 1 23 8 7 输入带路径的两个文件名,路径相同为重命名

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

命令解释程序

命令解释程序 命令解释程序的作用 命令解释程序的组成 常驻部分 这部分包括一些中断服务子程序。例如,正常退出中断INT 20,它用于在用户程序执行完毕后,退回操作系统;驻留退出中断INT 27,用这种方式,退出程序可驻留在内存中;还有用于处理和显示标准错误信息的INT 24等。常驻部分还包括这样的程序:当用户程序终止后,它检查暂存部分是否已被用户程序覆盖,若已被覆盖,便重新将暂存部分调入内存。 初始化部分 它跟随在常驻内存部分之后,在启动时获得控制权。这部分还包括对AUTOEXEC.BAT 文件的处理程序,并决定应用程序装入的基地址。每当系统接电或重新启动后,由处理程序找到并执行AUTOEXEC.BAT文件。由于该文件在用完后不再被需要,因而它将被第一个由https://www.doczj.com/doc/2a18216987.html,装入的文件所覆盖。 暂存部分 这部分主要是命令解释程序,并包含了所有的内部命令处理程序、批文件处理程序,以及装入和执行外部命令的程序。它们都驻留在内存中,但用户程序可以使用并覆盖这部分内存,在用户程序结束时,常驻程序又会将它们重新从磁盘。 命令解释程序的工作流程 系统在接通电源或复位后,初始化部分获得控制权,对整个系统完成初始化工作,并自动执行AUTOEXEC.BAT文件,之后便把控制权交给暂存部分。暂存部分首先读入键盘缓冲区中的命令,判别其文件名、扩展名及驱动器名是否正确。若发现有错,在给出出错信息后返回;若无错,再识别该命令。一种简单的识别命令的方法是基于一张表格,其中的每一表

目都是由命令名及其处理程序的入口地址两项所组成。如果暂存部分在该表中能找到键入的命令,且是内部命令,便可以直接从对应表项中获得该命令处理程序的入口地址,然后把控制权交给该处理程序去执行该命令。 https://www.doczj.com/doc/2a18216987.html, 的工作流程

操作系统第三版实验指导

实验一命令解释程序 1.1 实验目的 ?掌握命令解释程序的设计方法。 ?学习Windows系统调用的使用,了解目录操作、进程控制等相关知识。 ?理解并发程序中的同步问题。 ?培养C/C++语言程序设计技能,提高程序设计和文档编写能力。 ?锻炼团队成员的交流与合作能力。 1.2 实验要求 1.2.1基本要求 本实验要求实现一个简单的命令解释程序,其设计类似于MS-DOS的Command程序,程序应当具有如下一些重要特征: ?能够执行cd、dir、tasklist、taskkill、history、exit等内部命令。 ?能够创建前台进程和后台进程。 此外,还应做到: ?使用VC建立工程。 ?提供清晰、详细的设计文档和解决方案。 本实验的具体要求如下: (1)参考Command命令解释程序,采用控制台命令行输入,命令提示行是当前目录与提示符“>”,在提示符后输入命令,执行结果在控制台中显示,如图1-1所示。 (2)实现以下内部命令。 ?cd <路径> 切换目录。 ?dir 显示指定目录下的文件、目录及磁盘空间等相关信息。 ?tasklist 显示系统当前进程信息,包括进程标识符pid、线程数、进程名等。 ?taskkill 结束系统中正在运行的进程,须提供进程标识pid。

?history 显示控制台中曾经输入过的命令。 ?exit 退出控制台。 (3)对前台进程和后台进程的操作。 本实验设计的命令解释程序可以将进程放在前台执行或者后台执行。 图1-1 命令解释器界面 启动前台进程,即在提示符下输入: fp <可执行文件> 启动后台进程的命令格式为: bg <可执行文件> 解释程序在前台进程运行期间需要一直等待,直到前台进程运行结束才打印命令提示符,而在后台进程运行期间不必等待,会立刻打印出命令提示符,允许用户输入下一条命令。命令解释程序中还需要捕获Ctrl+C组合键的信号来结束前台正在运行的进程,并返回用户输入界面,等待新命令输入。 (4)其他要求。 该命令解释程序应该具有相应的出错提示功能。程序每次接收用户输入的一行命令,在用户按下回车键(Enter)后开始执行命令。空命令只打印一个新的提示行,不做其他处理。定义空格为分隔符,程序应能处理命令行中出现的重复空格符。提供帮助命令help,供使用者查询每个命令的用法。

c语言模拟shell命令行解释程序

北京联合大学 《操作系统课程设计》实验一:命令行解释程序 学院:信息学院专业:计算机科学与技术 课程:操作系统班级: 1 1 0 3 B 姓名:傅笔贵学号: 2009080305302 2014年7 月10 日

一.采用的数据结构说明 字符数组: 本程序中包含的字符数组有: filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。 filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。 oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。 newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。 Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。 File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。 Word[100]:在Cdis()中存放用户要回显的字符串。 二.源程序清单、注释和流程图 (1)流程图

(2)源程序和注释 #include #include #include #include #include #include #include int flag=1; char ch[8];//存储文件读取内容的中间变量 FILE *fp; FILE *fp1; char filename1[20];/*复制文件候存放的原文件名*/ char filename2[20];/*复制文件候存放的目标文件名*/ char oldname[20];/*用来存放移动文件的源文件名*/ char newname[20];/*用来存放移动文件的目标文件名*/ void start_copy(char *filename1,char *filename2) /*文件复制函数,可以实现文本和图片的复制*/ { if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"wb"))==NUL L) /*源文件或目标文件打开失败则无法进行复制*/ { printf("can't open the source file!\n"); exit(0); } else { fread(ch,1,8,fp);//一次读取八个字节的字节流,存放到ch字符数组里 while (!feof(fp))//没读取到文件尾部时,持续读取 { fwrite(ch,1,8,fp1);//写到目标文件里 fread(ch,1,8,fp);//继续读取 } fclose(fp);//关闭指针,释放内存 fclose(fp1); } }

《C程序设计语言》模拟试卷二

一、单项选择题 1.以下并非C语言的特点的是____________。 A.C语言简洁紧凑 B.能够编写出功能复杂的程序 C.C语言可以直接对硬件进行操作 D.C语言移植性好 2.在C程序中,main()的位置___ ______。 A.必须作为第一个函数 B.必须作为最后一个函数 C.可以任意 D.必须放在它所调用的函数之后 3.一个C程序是由____ ________。 A.一个主程序和若干个子程序构成 B.一个或多个函数构成 C.若干过程组成 D.若干子程序组成 4.以下字符串为标识符的是___ _________。 A._MY B.2_2222 C.short D.LINE 5 5.下列符号可以作为变量名的是___ ________。 A.+a B.*p C._DAY D.next day 6.设c是字符变量,则以下表达式正确的是___ _______。 A.c=666 B.c='c' C.c="c" D.c="abcd" 7.以下说法正确的是_____ _______。 A.输入项可以为一个实型常量,如scanf("%f", 3.5) B.只有格式控制没有输入项也能进行正确输入,如scanf("%d") C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如 D.当输入数据时,必须指定变量的地址,如scanf("%f", &f) 8.若a, b, c均定义为整型,要给它们输入数据,正确的输入语句是____ ________。 A.read(a, b, c); B.scanf("%d%d%d", a, b, c); C.scanf("%D%D%D", a, b, c); D.scanf(%d%d%d", &a, &b, &c); 9.若a是float变量,b是unsigned型变量,以下输入语句中合法的是____ ___。 A.scanf("%6.2f%d", &a, &b); B.scanf("%f%n", &a, &b); C.scanf("%f%3o", &a, &b); D.scanf("%f%f", &a, &b); 10.if后面的表达式之值__________。 A.只能是0或1 B.只能是正整数或负整数 C.只能是整数或字符型数据 D.可以是任何类型的数据 11.为了避免嵌套的if-else语句的二义性,C语言规定else总是与__ ___组成配对 关系。 A.缩排位置相同的if B.在其之前未配对的if C.在其直接最近的未配对的if D.同一行上的if 12.选择出合法的if语句(设int x, a, b, c;)____ _____。 A.if(a = b0 x++; B.if (a =< b) x++; C.if(a <> b) x++; D.if (a=>b) x++; 13.语句while(!e); 中的条件!e等价于____ _______。 A. e == 0 B.e!=1 C.e!=0 D.~e 14.C语言中while和do-while循环的主要区别是____ _______。 A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格

操作系统实验5-命令行接口实验

实验五 命令行接口实验 一:实验目的 了解命令行接口的使用 二:实验内容 用C语言编写一个模拟的命令解释程序。要求自己设计一个OS命令接口,包含若干条命令,然后编写一个命令解释程序,要求对用户输入的字符串进行分析 ,命令得出结果输出到文本文件。 譬如输入dir ,显示出当前目录下所有的目录和文件。 提示调用system()函数,来实现命令解释。 三:实验类别 命令行接口实验 四:实验类型 模拟实验 五:主要仪器 计算机 六:结果与问题总结 1.对老师的题目要求理解有点模糊,编写的程序比较简单,不知道写得对不对........ 2.对字符与字符串的使用有点混淆 运行结果 查找成功的: 查找不成功的:

七:程序 #include #include #include void system(char n[10])//查找函数 { if(strcmp(n,"login")==0||strcmp(n,"passward")==0||strcmp(n,"format")==0 ||strcmp(n,"diskcopy")==0||strcmp(n,"diskcomp")==0||strcmp(n,"backup")==0||strcmp(n ,"restore")==0 ||strcmp(n,"type")==0||strcmp(n,"copy")==0||strcmp(n,"comp")==0||strcmp(n,"rename") ==0||strcmp(n,"erase")==0 ||strcmp(n,"mkdir")==0||strcmp(n,"dir")==0||strcmp(n,"rmdir")==0||strcmp(n,"tree")==0| |strcmp(n,"chdir")==0) { printf("在本系统中可以查找到您所输入的命令!!\n");//可以查找到 printf("您所输入命令的意思是:\n");//输出命令的含义 if(strcmp(n,"login")==0) { printf("用户键入自己的注册名\n"); } else if(strcmp(n,"passward")==0) { printf("用户键入自己的口令\n");

linux操作系统之Shell编程

shell1.sh 显示日期和时间。 #!/bin/bash echo “current time is `date`” //date要加反引号 shell2.sh 显示文件名,并显示位置参数(执行时带一个参数)。(①$0是一个特殊的变量,它的内容是当前这个shell程序的文件名;②$1是一个位置参数,位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。) #!/bin/bash echo “the program name is $0” //$0是一个特殊的变数 echo “the first para is $1” //$1是一个位置参数 echo “the program exit” //执行时带一个参数如./shell2.sh abcd shell3.sh 判断并显示位置参数 #!/bin/bash if [ -d “$1”];then echo “$1 is directory ,existed” else echo “$1 does not exist ,now create it” mkdir $1 echo “$1 is created” fi //执行时带一个参数 shell4.sh 问候用户 #!/bin/bash user=`whoami` case $user in teacher) echo “hello teacher”;; root) echo “hello root”;; *) echo “hello $user,welcome” esac 1、求1+2+3+...+100的和是? #!/bin/bash

第六章 dc_shell综合脚本

第六章dc_shell命令解释程序 第一节设计目标 6-1-1背景介绍 dc_shell 是Synopsys Design Compiler的shell(命令解释程序),与unix的shell 类似。Unix的C shell 和Bourne-shell作为命令解释程序,在用户和unix 核之间实现了功能极强的接口程序。相同地,Dc_shell最为Synopsys Design Compiler的功能极强的命令解释程序。象unix shell 提供程序设计语言在unix 文件系统中操作一样,dc_shell 提供script(脚本)语言在Design Compiler 的设计中操作,且仿造unix shell 的相同的结构。 用dc_shell 脚本综合设计有许多优点:首先,脚本执行速度比象design analyzer 交互式的界面快得多,脚本也用来证明综合设计的过程。更重要的是,脚本提供一个重复编译的机制,这不仅对设计的再利用重要,而且对于当要求一项函数改变时,再次产生设计文件的所要求的时间最小化也很重要。 所有的这些优点源于使用脚本自动走完综合流程。但是,dc_shell 脚本能够做的远不只这些,它能扩展Design Analyzer和Design Compiler的功能。一些Design compiler命令的顺序由脚本得出。大多数经验丰富的Synopsys的用户将脚本和Design analyzer结合使用来分析和优化设计。 6-1-2 目标程序类型的审阅 dc_shell脚本生成设计目标程序和编译属性来引导综合流程。当编写dc_shell脚本时,考虑正在运行的目标程序/信息的类型是很重要的。这一节从“Design Compiler Family Reference Manual”的章节中总结了“design compiler”的概念。 6-1-2-1 实例、网络、端口 原理图由三个基础的构件组成:实例、网点、端口。实例是代表逻辑子程序或层次的符号,网络是代表在实例之间有电气连续性的导线,端口是用来代表层次连续性的线路终结器。这些都是标准的术语。使设计者感到新颖的是reference 的概念。 6-1-2-2 单元、引用、设计 如果一实例代表一逻辑子程序,则它能代表什么类型的子程序呢?一实例能代表一库元件或一设计。用许多术语描述设计是必须的因为一设计可能包含同一库元件(或子设计)的多重实例。 举例说,一典型设计包含与非门,设计中的每一门实例都被赋予唯一的单元名用来在非唯一的实例中彼此区分。同样的,一设计可能包含多个加法器,与与非门不同,加法器一般来说不是库元件,加法器是一个可逐步分解成库元件和网络且相互连接后执行加法器功能的完全设计。与库元件相同,每一子设计的实例都被赋予唯一的单元名。 库元件是无形的设计子程序且在设计中常被做为节点单元引用。设计是逻辑块,它们可作为独立的设计或作为更大设计的子设计。作为其它设计中连接上下关系的子模块,设计中每一个唯一的实例被作为一个分层次的单元引用。在一个单独设计的上下关系中,每一个实例具有唯一的单元名,这些单元引用库元件或设计。设计者可以对每个单元单独地进行优化,也可以通过布置属性或约束(在以下定义)对每个库元件或设计进行优化。但是,属性被直接加至库元件或设计中,这可能影响包含引用这些库元件或设计的每一个设计。 图6.1 单元、引用、设计之间的关系 假设你想要影响一个单独设计中的每一个与非门的优化而没有影响其它设计中的与非门则将会如何呢?引用的概念使这成为可能,设计中的每一个单元不仅是库元件中或设计中唯一命名的实例,而且是引用库元件或设计的一系列单元中的一员。 参考以下图6.2的设计: 图6.2脉动计数器:count_16 这个分层次设计的顶层是一个16位的计数器,顶层设计由与非门、或非门、8位计数器组成。在这层次设计的关系

命令行简介

一.命令行简介 命令行就是在Windows操作系统中打开DOS窗口,以字符串的形式执行Windows管理程序。 在这里,先解释什么是DOS? DOS——Disk Operation System 磁盘操作系统 目前我们常用的操作系统有windows 9x/Me,NT,2000等,都是可视化的界面。在这些系统之前的人们使用的操作系统是DOS系统。DOS系统目前已经没有什么人使用了,但是dos命令却依然存在于我们使用的windows系统之中。大部分的DOS命令都已经在Windows里变成了可视化的界面,但是有一些高级的DOS命令还是要在DOS环境下来执行。所以学习命令行对于我们熟练操作Windows系统是很有必要的。 不同的操作系统要用不同的命令进入命令行界面。 在Win9x/Me的开始菜单中的运行程序中键入"command"命令,可进入命令行界面。 在Win2000/NT的开始菜单中的运行程序中键入"cmd"命令,可进入命令行界面。 下面我用讲到的DOS命令都可以在Windows Me操作系统中执行。 那么,我们如何进入命令行窗口? 开始——〉运行——〉键入command命令——〉回车 进入了命令行操作界面(DOS窗口),在DOS窗口中只能用键盘来操作。如下所示: 二.符号约定 为了便于说明格式,这里我们使用了一些符号约定,它们是通用的: C: 盘符

Path 路径 Filename 文件名 .ext 扩展名 Filespec 文件标识符 [ ] 方括号中的项目是可选项,用户可以根根据需要不输入这些内容 { } 大括号表示其中的项目必选一项 | 竖线表示两侧的内容可取其一 … 表示可重复项 三.命令行的输入方法 在DOS窗口中通过输入英文命令加回车键这种方式来执行程序。 四.内部命令和外部命令 命令行程序分为内部命令和外部命令,内部命令是随https://www.doczj.com/doc/2a18216987.html,装入内存的,而外部命令是一条一条单独的可执行文件。 内部命令都集中在根目录下的https://www.doczj.com/doc/2a18216987.html,文件里,电脑每次启动时都会将这个文件读入内存,也就是说在电脑运行时,这些内部命令都驻留在内存中,用dir命令是看不到这些内部命令的。 外部命令都是以一个个独立的文件存放在磁盘上的,它们都是以com和exe为后缀的文件,它们并不常驻内存,只有在电脑需要时,才会被调入内存。 五.常用命令 DOS命令总共大约有一百个(包括文本编辑、查杀病毒、配置文件、批处理等),我们这里详细介绍二十个常用的DOS命令。 先介绍一下通配符的概念。

相关主题
文本预览
相关文档 最新文档