Linux实验报告_第1页
Linux实验报告_第2页
Linux实验报告_第3页
Linux实验报告_第4页
Linux实验报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、中南大学Linux 系统实验报告实验39实验二1016实验三1717实验一 Shell 程序设计 实验目的理解 Shell 程序的设计方法; 熟悉 Shell 程序的编辑、运行、调试方法与过程。 实验内容考勤模拟 Shell 程序设计用 shell 设计一个考勤模拟程序,实现如下功能选择界面:1. 上班签到2. 下班签出3. 缺勤信息查阅4. 退出考勤程序运行后, 提示用户输入上述功能选择, 并验证用户输入的用户名和密码; 用户信息保存在userinfo.dat 中。如果是上班签到,记录签到信息,如果签到时间大于上午8 时,则提示用户迟到,并记录该迟到信息到check.dat 。如果是下班签出

2、,记录签出信息,如果签出时间小于下午6 时,则提示用户早退,并记录该早退信息到check.dat 。如果用户选择缺勤信息查询,则将check.dat 中对应该用户的迟到早退信息查出并显示。用户选择功能执行完, shell 程序继续回到功能选择界面等待下一个用户进行操作。、实验分析本实验是 shell 程序设计,主要目的是理解shell 程序的设计方法以及熟悉 shell 程序的编辑、运行、调试方法与过程。Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。实际上Shell 是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不

3、仅如此, Shell 有自己的编程语言用于对命令的编辑,它允许用户编写由 shell 命令组成的程序。 Shell 编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的 Shell 程序与其他应用程序具有同样的效果。本实验要求设计一个考情模拟的 shell 程序,按照题目要求,可将整个程序分为五个部分: main 函数以及四个功能函数,及一个功能对应一个函数。1、上下班签到将此函数定义为check_in();根据题目要求,运行程序后首先要求用户输入用户名和密码,当用户名密码正确时才可进入,这就要用到shell编程中的变量,shell中的变量和C语言或是J

4、AVA中的变量都有所不同,shell中的变量不需要事先声明,给一个变量赋值实际上 就定义了一个变量,并且shell程序中的变量是无类型的。我们定义两个变量 name和password,由题目要求,用户名和密码需要由用户输入,因此我们定义的变量应该从键盘获取输入值,使用如下语句: read name password;我们在开发程序前应先创建一个文件userinfo.dat 用于存放用户的用户名和密码,当用户输入用户名和密码后就要判断该用户是否合法。方法为从userinfo.dat 文件中逐行读取数据,并判断是否与用户输入的用户名相同,当遇到相同的用户名时就表明该用户是合法的,可以退出文件的读取

5、,转入判断该用户输入的密码是否正确。从文件中逐行读取数据方法:if test -e /home/poe/userinfo.datthenwhile read u_name u_password doif test $name = $u_name thenbreak;else continue;fidone /home/poe/userinfo.dat用户名和密码正确后用户进入系统,系统显示用户签到成功,此时还要判断此时的时间是否大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat 。2、下班签出将此函数定义为 check_out(),前面部分和上一个函数check_in()相同,

6、都为判断用户输入的用户名和密码。不同之处在于记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat 。3、缺勤信息查阅将此函数定义为100ko ,首先还是判断该用户输入的用户名和密码是否正确。用户进入系统之后就要打印出该用户的签到信息,将check.dat中对应该用户的迟到早退信息查出并显示。在这一步中,首先还是要从check.dat文件中逐行读取数据,不过并不直接打印,而是 要等判断用户名后才能打印。while read recorddouser=$record% *;if test $user = $name thenecho $record;fido

7、ne /home/poe/check.dat其中user=$record% *;语句表示截取record字符串从左边起第一个空格前的字符 串,也就是用户名,然后检查和该用户的用户名是否匹配,若匹配则打印否则读取下一条。、实验源码#! /bin/bashfunction show()echo Welcome to Attandance Systemecho 1.checkinecho 2.checkoutecho 3.lateecho 4.exitecho Please input your choice:;function check_in()echo Please input your na

8、me and password:;read name password;if test -e /home/poe/userinfo.datthenwhile read u_name u_passworddoif test $name = $u_namethenbreak;elsecontinue;fidone check.dat; fifielseecho There is no this file; fifunction check_out()echo Please input your name and password:;read name password;if test -e /ho

9、me/poe/userinfo.dat thenwhile read u_name u_password doif test $name = $u_name thenbreak;elsecontinue;fidone check.dat; fifielseecho There is no this file; fifunction 100koecho Please input your name and password:;read name password;if test -e /home/poe/userinfo.dat thenwhile read u_name u_password

10、doif test $name = $u_name thenbreak;elsecontinue;fidone /home/poe/userinfo.dat if test $name != $u_name thenecho Sorry,your name is wrong!; elif test $password != $u_password thenecho Sorry,your password is wrong!; elsewhile read record douser=$record% *;if test $user = $namethenecho $record;fiecho

11、There is no this file;done .Late!2617*.Late!5 17:27:48 PDT 2817*.Late!out at ,Mon Jun 5 17:28:28 PDT 2G17.Early! poeQubuntu:*$ |实验 2 Linux 高级程序设计- 进程通信1 、实验目的(1)了解 Linux 操作系统下应用程序开发流程(2)掌握 GNU 工具链的使用(3)了解Linux高级编程技巧(例如IPC机制、系统调用等)2、实验内容( 1) 编写一个简单的 C 语言程序,编写 Makefile 文件。了解编译过程,并用gdb进行调试。( 2) 以下任选其一:

12、1 .编写一个多进程通信程序,采用 Message Queue或shared Memory或者Pipeline File 机制进行通信2 . 编写一个实现读者- 写者问题的程序,用信号量机制备注:读者-写者问题设有一组共享数据DB 和两组并发进程,一组进程只对此组数据执行读操作,另一组进程可对此组数据执行写操作(同时也可以执行读操作)。将前面一组进程称为读者,后一组进程称为写者。为了保证共享数据的完整性,要求:( 1)多个读者的操作可以同时进行( 2)多个写者的操作不可同时进行( 3)任何读者与写者的操作不可同时进行3、实验要求1) 写出源程序,并编译运行2) 详细记录程序调试及运行结果一、M

13、akefile思路分析在本实验中编写输入学生人数及分数,计算学生的总成绩以及平均成绩的程序,源程序如下:/*main.c*/#include #include chengji.hint main()int n,i;float sum,avg;printf(please input the number ofstudents:);scanf(%d,&n);float scoren;for(i=0;in;i+)printf(please input the score of student%d,i);scanf(%d”,&scorei);sum=fun_sum(score,n);avg=fun_a

14、vg(score,n);printf(the sum is %f,the avg is %f,sum,avg);/*chengji.h*/float fun_sum(float array口,int n);float fun_avg(float array,int n);/*fun_sum.c*/float fun_sum(float array口,int n) float sum=0.0;for(int i=0;in;i+) sum+=arrayi;return sum;/*fun_avg.c*/float fun_avg(float array,int n)float avg=0.0;fo

15、r(int i=0;in;i+) avg+=arrayi;avg/=n;return avg;Makefile文件如下:main:main.o fun_sum.o fun_avg.ogcc main.o fun_sum.o fun_avg.o -o main main.o:main.c chengji.hgcc main.c -cfun_sum.o:fun_sum.cgcc fun_sum.c -cfun_avg.o:fun_avg.cgcc fun avg.c -c运行结果如下:Terminaltf. 力 CJ:OJ f-M 也poeubuntu: /makepotijubuntucd rs

16、kefilpbash; cd: nkefUe: hot a directorypoejiubuntu cd makepoe$ubuntu :,rnakc$ make flakei naln1 ts up to date.poeijubuntu:独$ |二、读者-写者思路分析读写信号量的特点是:1 .同一时刻最多有一个写者(writer)获得锁;2 .同一时刻可以有多个读者(reader)获得锁;3 .同一时刻写者和读者不能同时获得锁;由于读者可以同时获得锁,因此提高了系统的并发程度,进而提高了系统的性能。源程序如下:#include #include #include /定义数据类class

17、datapublic:data(int i, float f):I(i), F(int I;float F;);/读者写者读写的内容data *p_data = NULL;pthread_rwlock_t lock;/写者数目const int WRITER_NUMBER = 2;void *reader(void *arg);void *writer(void *arg);int main(int argc, char *argv)pthread_t reader_tid;pthread_t writer_tidWRITER_NUMBER;pthread_create(&reader_tid

18、, NULL, reader, NULL); for (int i = 0; i I, p_data-F);一 一pthread_rwlock_unlock(&lock);return (void *)0;void *writer(void *arg)pthread_detach(pthread_self();while (true)pthread_rwlock_wrlock(&lock); printf(writer is writing the data;); if (p_data = NULL) .p_data = new data(1, 1.1f);printf(writer create the data (%d, %f)n, p_data-I, p_data-F);else delete p_data;p_data = NULL;printf(writer free the datan);pthread_rwlock_unlock(&lock);return (void

温馨提示

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

评论

0/150

提交评论