《Linux操作系统》实验报告模板_第1页
《Linux操作系统》实验报告模板_第2页
《Linux操作系统》实验报告模板_第3页
《Linux操作系统》实验报告模板_第4页
《Linux操作系统》实验报告模板_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程编号:b080103040linux操作系统实验报告姓名姚柯杰学号20126266班级软工1212指导教师石凯实验名称linux操作系统实验开设学期2014-2015 第一学期开设时间第11周第18周报告日期评定成绩评定人石凯评定日期东北大学软件学院一、举例列出常用的shell命令使用方法1目录操作(1) mkdir abc创建一个目录abc(2) cd /abc将工作目录改变到abc(3) cd改变当前目录到主目录ejpepopropo:*- x文件(e) »2(e> »«(¥)搜实终端(pepopropo *)s akdir abc(pep

2、opropo *j$ cd abcpepopropo abc$ cdpep(m3propo -is |(5) is -1输出当前fl录内容的长列表,每个冃录或文件占一行pepo<§)propo:*. x文件(e)絢说(討 «§(v)姑(s)终鏘(d帮助(旦)(pepopropo -*$ mkdir abcpepopropo -$ cd abc (pepopropo abc|$ cd (pepopropo is abc shiyan公共的 揆板 视频 囲片 文档 t« 音乐 桌面 pepopropo t$ is l 总用且4e drwxrwxr d

3、wr dr¥»xr-xr drwxrxr drwxrxr drvxr xr drxr-xr drwxrxr drwxrxr drv/xr xr.(pepopropo *$ |2 pepo pepo 46962 pepo pepo 40962 pepo pepo 40962 pepo pepo 40962 pepo pepo 40962 pepo pepo 40962 pepo pepo 40962 pepo pepo 40962 pepo pepo 46962 pepo pepo 409612月12月12月 12月12月12月12月 12月12月12月30 18:43 ab

4、c24 15:20 shiyan3 22:00 公乂的3 22:093 22:00观頻3 22:00團片3 22:00文档3 22:00 ktt3 22:003 22:00戊向(6)pwd显示当前目录的全路径c3pepopropo:-文件(e)缩55(e)查看(y)獲实(s)终端 帮助(旦)pepopropo -*$ mkdir abc jpepopropo j$ cd abc pepopropo abc$ cd pepopropo t$ is abc shiyan公共的梗板视頻图片文档下製音乐虫囲 pepopropo *$ is l 总用虽40drx rwx r - x.2pepopepo4

5、09612月3018:43abc.drwx rwx r - x.2pepopepo409612月2415:29shiyanbdrwxr-xr-x.2pepopepo409612月322:00公共的drwxrxrx2pepopepo409612月322:00模板drvxr-xr-x.2pepopepo409612月322:00视频drxxrx.2pepopepo469612月322:00图片drwxr-xr-x.2pepopepo469612月322:00文档d rv.*x r - x r - x 2pepopepo469612月322:00tttd rv/x r - x r x 2pepope

6、po409612月322:66音*d rwx厂x rx.2pepopepo409612月322:06pepopropo *$ pwd /home/pepo pepopropo -$ |2文件显示实用程序(1) cat mx. c显示mx. c文件内容分屏显示inx. c内容(2) more mx c(3)cat filel file2 连接 filel 和 f订e23文件管理实用程序(1) cp f订el file2 将文件1复制到文件2(2)mv filel file2将文件重命名为file2删除文件filename(3)rm filenameabcjs abcj$ abcj$ abcj$

7、abc$abcjs abcjs abcj$ abcj$ abc$通过实例写出linux下c程序编辑运行过程。在终端命令下输入vi filename命令,这里我输入vi helloworld.c创建并打开helloworld.c 文件pepopropo:*/abc文件(£)彌(曰 sti(v) ss vkj(wpepopropo abcs is l2用虫8mrvr 1 pepo pepo 171 12月 10 68:34 ax.c -rw-rw-r- 1 pepo pepo 66 12月 30 18:57 ny.c pepopropo abc$ vi pepopropo abcj$ p

8、epopropo abcjs pepopropo abcjs pepopropo pepogpropo pepo$propo pepopropo pepopropopepopropo abc$ pepopropo abcjs pepopropo abcjs pepopropo pepog»propo pepo$propo pepopropo pepopropopepopropo abc$ pepopropo abcj$ vi helloworld pepopropo abcjs |按i进入编辑模式,输入下列code:# inelude <stdio.h> void mai

9、n (void)jiprintf( "hello world!nv ); 输入:wq保存退出输入cc helloworld.c编译,在输入./a.out运行pepopropo:*/abc文件(£)須(f) b»(y)际终洪(i) wft(h)pepopropo abc$ (pepopropo abc$ (pepopropo abc$ (pepo(3propo abcjs (pepopropo abcjs pepopropo abcjs pepopropo abc$ (pepopropo abc$ (pepo0propo abcjs (pepopropo abcjs

10、 pepopropo abcjs (pepopropo abc$ (pepopropo abcjs (pepo(3propo abcjs (pepogpropo abcjs pepopropo abcjs (pepopropo abcjs (pepopropo abcjs (pepo(apropo abcjs (pepopropo abcjsvi cc vihelloworld.c heuoworld.c helloworld.c helloworld.c./aoutbash:/aout:段有那个文件或目录 pepopropo abc$ /a.out hello world!(pepo(apr

11、opo abc$ |三、实验总结在实验一中,我初步对linux有了初步的了解,能熟练目录和文件进行操作,并且能 m linux进行基本简单的基于c的编程。师傅领进门,修行在个人,算是通过这个实验进入 了 linux 的门。实验二文件操作一、实现cp命令实现思路:提取出源路径和目标路径到函数中,放于定义的两个int变量,定义缓冲 区buf,对两个变量进行判断,如果符合要求打开读取源文件信息存于缓冲区,然后写到目 标文件中,关闭两个文件以实现等同cp效果。fxpofhkopo:x«(£)*($ fbpeporopo thiy*n$ cat copy.e include <

12、sys/type$.h> includeinclude <fcntl.h>includeincludes«(d hm(£)t«(y)($i twmd 农"01)p9pompropo:*/fhly*n&f(argc!«3k printf(eaissing file operandn*h emitti);minllnt argc, char edrgv()( lnt fdl. fd2: lnt n: ch«r hf|w4hlf(fdlaopen(argv|l|. 0 pcrrorccaonot open*):pr

13、lntfcalsiing flit oo«ramfte); xit(l);m(fd2-cr««t(afgvui. 777hh< perror(sc>finot crent*); wiult:if(fdi>open(af9vuj. o raxm.t)m-i) perror(*cannot open*): exit(i);if(fd2»creat(«rgv(2l 777)»1)( perrorccdnnot cret*):clos(td2);ipeporopo shiyan i $ « copy.c |pepo

14、»propo »hly«nj$ |wt»lw<<n.readudl. buf. 1924h>9)(write(fd2, buf. n)|此处以helloo c文件为源文件,目标文件l.c。pepopropo:-/shiyan文件(i)翩匡)w(v)転(s)终端(i)希助型)pepopropo pepopropo pepopropo pepopropo pepoproposhiyan$shiyan$shiyan$shiyan$ cc copy.c shiyanjs ishello.c list h process c progrss c

15、pepopropo shiyan$ ./d.out hello.c pepopropo shiyanjs is l.ccopy.vlisthh.out hello.c ss.cpepo(apropo shiyanjs cat #inelude <stdio.h>main() printf(mhellon"); return 0;progrss2c shiyan_3_2c shiyan 3c shiyan33.c sockettc l.cprocess.c progrss2.c hello.cprogrsscshiyan 3 3c socketcshiyan 3 2.c s

16、hiyan 3.cl.cpepopropo shiyans cat #inelude <stdio.h> main()printf(mhellon*); return 0;pepopropo shiyan$ 在调试cp命令中,由于一开始并未定义缓冲区,导致程序出错,后假如缓冲区,程序得以 正常运行。二、实现is命令实现思路:调用dirent.h來实现打开目录流,定义变量,随后对变量进行判定用opendir.readdir打开并读取目录流,将值传递给另一个变量,打印出来。pepopropo:*/shiyan文件(巳缩摄(日宜看(y)搜索(s)终端任)楮助(h) 岸include &l

17、t;stdio.h>tinclude <sys/types.h>include <dirent.h>main(int argc, char *argv)dir dirp;struct dirent * p;if(argc=l)dirp=opendir("."); elsedirp=opendir(argv(ll);编译源程序并运行:hiyen«»(£) l«(k) t21(£) «r«u)q|p«popropo:«/shiyanxn(dt«(y)

18、flw (s> kwdntijftje-,l.c0d.otxtiecl4 timl fuel<0w<fimlfixleimlmkmimilljm1 .hcllo.ciss.cproce»».c»«clrtki<imim leq-progrsscproqrq.cowyan jcuelmet-closedir(dirp);fijshiyan v门用册&ipepocpropo shiy«n|$ cc bs.cj*po$propo shiyanjl ./a.out "iy”丄 list.tr»hlya

19、n 3.c shiyaa 33.c progril.c progrs$2,c .out proceit.c l.c shekel.c copy.c l««.c hello.cp<po«>ropo shiyan)$ 口鼠标对应的设备文件是/dev/input/micep1回pepopropo:_ x文件(e)编辑(日 查看也)捜索(s)终端任)帮助(旦)pepopropo $ pepo(apropo j$ pepopropo $ pepo(apropo j$ pepopropo $ pepo(apropo j$ pepopropo $ pepo(apro

20、po j$ pepopropo $ pepo(apropo pepopropo pepo(apropo pepo(apropo pepo(apropo pepo(apropo pepo(apropo pepo(apropo pepoqpropo pepopropo pepo(apropo pepo(apropo pepo(apropo 5863 crv/-r- pepo(apropo -$ |在实现is命令中使用man手册查找需要的dir等目录流信m, man是个强大的命令,在编程 的过程中由于疏忽一开始并未假如判断条件,有些突发情况会难以处理,最后通过课件修过 过來。三、设备文件操作t$t$

21、t$t$t$t$t$t$t$t$t$ is /dev/input/mice 1 root root 13, 63 1 月 13 21:41 仏口必li皿沛e实验三进程间通信(一)进程的创建(必做题)编写一段程序,使用系统调用fork()创建两个子进程,在系统中有一个父进程和两个 子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示 字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。pepopropo:*/shiyan文件(日 编辑(e) m(v)援秦(s)终端任)# include<stdio.h>main() int plf p2; whil

22、e(pl=fork() )«-l); if (pl=0) |jutchar( 'b*); else whi e(p2=fork()=-l); if (p2=6) putchar('c');else putchar( *a');-fork.c- dos 14lr 292c6,ie全祁1)pepopropo:*/shiyan文ft(f) 诙(e)亘看(y)揆希(s)终鐸任)pepopropo shiyan$ cc fork.c pepopropo shiyanjs ./a.out ab|pepo(3propo shiyac./a.out abcpepopr

23、opo shiyanjs ./a.out abpepopropo shiyan$ t./a.out abcpepopropo shiyan$ ./a.out bacpepopropo shiyanjs ./a.out abpepopropo shiyan|$ c./a.out bapepopropo shiyanjs t./a.out abcpepopropo shiyan$ ./a.out bacpepopropo shiyanjs ./a.out acbpepopropo shiyan$ ./a.out bacpepopropo shiyanjs ./a.out abc(pepopropo

24、 shiyanjs ./a.out acpepopropo shiyan$ b./a.out abcpepopropo shiyanjs ./a.out abcpepopropo bacpepopropo abcpepopropo abcpepopropo bacpepopropo abcpepopropo abcpepopropo ._abpepo卽opo shiyanjs c|shiyan$ ./a.out shiyanjs ./a.out shiyan/a.out shiyanjs /a.out $hiyan$ /a.out shiyanjs ./a.out shiyanjs ./a.o

25、ut创建一个新的子进程。其子进程会复制父进程的数据与堆栈空间。fork成功则在父进 程会返回新建立的子进程pid,而在新建立的子进程中则返回0。如果fork失败则直接返回 -lo所以在循环条件上出现上述情况。修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏 幕上岀现的现彖,并分析其原因。(必做题)pepopropo:*/shiyan- o x文14(e) 雄(£)亘看(y)横矣(s)终氓任)帮助(h)£(子进程创建成功,到下一个while,第二个子进程成功到最后循环,输入parents 1-500,随后返回继续上面子进程的循坏输出0parents4

26、92 parents493 parents494 parents495 parents496 parents497 parents498 parents499 pepopropo shiyan$ sono sonl son2 son3 son4 sons son6 son7 son8 son9 sonlo sonll sonl2 sonl3 sonl4 sonl5【思考题】1. 系统是怎样创建进程的?答:在unix系统中,只有0进程是在系统引导时被创建的, 在系统初启时rtio进程创建1进程,以后o进程变成对换进程,1进程成为系统中的始祖进 程。unix利用fork()为每个终端创建一个子进程

27、为用户服务,每个终端进程又可利用forko 来创建其子进程,从而形成一棵进程树。2. 当前运行的程序(主进程)的父进程是什么?建立如下的c文件來获取pidpepopropo:-/shiyan文件(e)编辑(日 査看(y)搜索(s)终端任)帮助(旦)son491son492 son493 son494 son495 son496 son497 son498 son499 vi forkpepo(apropo shiyanjs cc forkc pepo(apropo shiya./a.out daughter 5019parents5018 son5020pepo(3propo shiyanjs

28、 vi forkc pepo(3propo shiyanjs cc forkc pepo(apropo shiyanj$ vi fork.c pepo(apropo shiyan$ cc forkc pepopropo shiya./a.out daughter 5183parents5182pepo(3propo shiyan$ son5184得到这三个进程pid,可见父进程的pid是5182o(二) 信号量机制实验【实验内容】1. 编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal ()让父进 程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,

29、父进程用系统调用 kill()向两个子进程发出信号,子进程捕捉到父进程发来的信号后,分别输出下列信息后 终止:child process 1 is killed by parent!child process 2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止:parent process is killed!实验要求:运行程序并分析结果。如果把signal (sigint, stop)放在号和号位置,结果会怎样并分析原因。 该程序段前面部分用了两个wait(o),为什么? 该程序段中每个进程退出时都用了语句exit(o),为什么?程序代码:# incl

30、ude<stdio.h>#include<stdlib.h># includevsignalh># include<unistd.h>#include<sys/types.h># include<sys/wait.h>int wait_mark;void waiting(),stop();void main() int pl,p2;signal(sigint,stop);while(p 1 =fork()=-1);if(pl>0)/while(p2=fork()= =-l);if(p2>0)/wait_mark=l;

31、waiting(o);kill(pljo);kill(p2,12);waitingo;waitingo;printf(nparent process is killed!n j; exit(o);1elsewait_mark=l;signal(12,stop);waiting();lockf(l,l,0);printf(nchild process 2 is killed by parent!nu);lockf( 1,0,0);exit(o);1elsewait_mark=l;signal(lo.stop);waitingo;lockf( 1,1,0);printf(mchild proces

32、s 1 is killed by parent!nh);lockf( 1,0,0);exit(o);void waiting()while(wait_mark!=o);void stop()wait_mark=o;pepopropo:*/shiyan- x文何(日 编5fi(e) «<(v) g (s)终端任)帮助也) pepcxapropo *$ cd shiyanpepojapropo shiyan$ vi processc pepopropo shiyan)$ cc process.c process.c:左函数'main'中: process.c:22:

33、: 15供纶函数'wait'的实歩太少process.c:23: ft谋:提供纶£s数wait'的实多太少 pepopropo shiyan$ vi process.c pepopropo shiyanj$ cc processc process.c:左ss数'main'中: process.c:22:错涙:琨供纶函数,wait,的实参太少 process.c:23:错误:提供给函数'wait'的实参太少 pepopropo shiyan$ vi processc pepopropo shiyanj$ cc processcpe

34、p(x5propo shiyanjs ./a.outad"da(dcparent process is killed! child process 1 is killed by parent! child process 2 is killed by parent! pepopropo shiyan$ |(1)当按下ctrl+c中断进程时,程序将执行,父进程打印消息,父进程mil 子进程,子进程1收到消息上锁,打印消息,然后解锁关闭进程,随后子进程2 同样操作,在kill子进程后父进程打印消息,中断自身进程。6pepapropo:-/shiyan x文件(e)编辑(e)x«

35、(v)揆索(s 终鐫任)釉助(旦)wait mark=l;(2)signal(10,stop);waitingj);lockf(l,l,0); printf("child process 1 is killed by parent!n"); lockf(l,0r0);exit(0);waitingo voidwhile(wait mark!=0); void stop()wait mark=0;pepo(apropo shiyanjs cc process.cpepo(apropo shiyanjs ./a.outacparent process is killed!chi

36、ld process 1 is killed by parent! child process 2 is killed by parent! pepo(apropo shiyanjs |运行后表面并没有任何改变,在两处加入代码之后,偶尔会出现需要在中断第一 次进程后需要进行第二次中断。在添加两个中段接受指令后,会先执行关于子进 程的代码片段。(3) 答:父进程为子进程收尸,防止僵尸程序出现。(4) 答:在调用处强行退出程序,运行一次程序就结束。(三) 进程的管道通信实验【实验内容】1. 编制-段程序,实现进程的管道通信。使用pipeo建立一条管道线。两个子进程p1和 p2分别向管道各写一句话:

37、child 1 is sending message!child 2 is sending message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。实验要求:运行程序并分析结果。pepo(3propo:*/shiyan文件(上)»tt(e)童看也)核(s)终華(!)秸助(旦)ghne(pid2>fork()«-l);if(pid2=0)lockf(fdl,l.e);sprintf(outpipe,"child 2 process is sending message!");write(fdl)9outpipe,50);sleep

38、 ; lockf(fd(lhe>e);exit(o);elseiwait(e);read(fd09inpipe,56);printf("%sn* rinpipe);wait(g);kread(fd0,inpipet5e);*printf("%sn",inpipe);exit(g);43rl底鑼3文伴(日编撬(曰 ie(v)獲索(s)终端 m(h)pepopropo shiyan$pepopropo shiyan$pepopropo shiyan$pepopropo shiyanjspepopropo shiyan$pepopropo shiyan$pepop

39、ropo shiyan$pepopropo shiyan$pepopropo shiyan$pepo(apropo shiyan$pepopropo shiyan$kpepopropo shiyan$pepopropo shiyan$pepopropo shiyan$pepopropo shiyan$ vi pidecpepopropo shiyanjs cc pidecpide.c:在函数'main'中:pide.c:18:誓吉:隐式芦明与内建西数- exit*不兼容pide.c:30:害告:隐式声明与内建函数4exitf不兼容pide.c:40:害告:隐式声明与内建西数&#

40、39;exit/不兼容pepopropo shiyan$ ./a.outchild 1 process is sending message!=child 2 process is sending message!pepopropo shiyan$ pepopropo:-/shiyan x2. 在父进程中用pipeo建立一条管道线,往管道里写一句话,两个子进程接收这句话。定义缓冲区,创建管道,随后创建进程,将父进程的消息写进缓冲去写进管道再传给写进子 进程,子进程接受。pepopropo:/shiyan文件(日 编辑(巳 iw(v)搜索(s)终端任)帮助但)0nt pidl,pid2;main

41、()int fd2;char outpipe100rinpipe100;pipe(fd);lockf(fdl,1,0);printffparents is sending message!nm); sprintf(outpipefhthis is pepo parents1msg!rt); write(fdlroutpiper50);lockf(fdlfof0);v/hile (pidl=fork() )=-l| | (pid2=fork() )=-l);if (pidl=0&&pid2=0)iockf(fd0flf0);read(fd0finpipef50);printf (

42、''child 1 process is resevice message!nh); printf("child 2 process is resevice message!'"'); printf(hthe message is %snmrinpipe); sleep(3);read(fd0finpipe,50);printf(mthe message is %snhfinpipe);lockf(fd0,e,e);5rl30%exit(0);插入rpepopropo shiyan$ vi pide2cpepopropo shiyan$ vi

43、 pide2.c|文件(e)编宦(e)查看也)搜素(s)终谓 祜助(旦) pide2.c:在函数'main'中:pide2.c:17:错谣:4pidf未声明(在此函数内第一衣便用)pide2.c:17:错淚:(即使在一个函数內务衣出现,每个未声明的标识特在其pide2.c:17:错误:所在的西数内也只損吿一汝。)pepopropo shiyans vi pide2cpepopropo shiyan$ vi pide2.cpepopropo shiyan$ cc pide2cpepopropo shiyan$ cc pide2cpepopropo shiyan$ ./a.outp

44、arents is sending message!pepopropo shiyan5 child 1 process is resevice message! child 2 process is resevice message!the message is this is pepo parents'msg!sddddddddaasdasdadbash: sddddddddaasdasdad: command not found pepopropo shiyans /a.out parents is sending message!child 1 process is resevi

45、ce message! child 2 process is resevice message!the message is this is pepo parents5sg!定义一个管道,父进程传递消息到管道,随后创建两个子进程接收这个消息,然后结束进程。实验小结:再这个实验中一开始打算将两个子进程分开判断,但是常常最后出现结果不是出 现僵尸进程就是跳过其屮一个子进程结朿,最后我觉得既然两个进程同时创建,不如直接将 他们一起进行判断。(四) 消息的发送与接收实验【实验内容】1.消息的创建、发送和接收。使用系统调用msgget ( ), msgsnd (), msgrev (),及msgctl(

46、) 编制一长度为1 k的消息发送和接收的程序。参考程序©client, c#include <sys/types. h>#include <sys/msg. h>#inelude <sys/ipc.h>#define msgkey 75struct msgform long mtype;char mtext1000;msg;int msgqid;void cl icnt ()int i;msgqid=msgget(msgkey, 0777);for(i=10;i>=l;i)msg. intype=i;printf( "(client

47、)sentn” ); msgsnd(msgqid, &msg, 1024, 0);exit (0);main()client();server, c#include <sys/types. h>#include <sys/msgh>#inelude <sys/ipch>#define msgkey 75struct msgform long mtype;char mtext1000;msg;int msgqid;void server()msgqid-msgget(msgkey, 07771ipc_creat); do(msgrev (msgqid, &msg, 1030, 0, 0);printf( “ (server)receivedn”);while (msg. mtype! = l);msgctl (msgqid, 1pc rm id, 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论