Linux实验报告Word文档格式.docx
- 文档编号:6179717
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:18
- 大小:339.47KB
Linux实验报告Word文档格式.docx
《Linux实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《Linux实验报告Word文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
本实验要求设计一个考情模拟的shell程序,按照题目要求,可将整个程序分为五个部分:
main函数以及四个功能函数,及一个功能对应一个函数。
1、上下班签到
将此函数定义为check_in();
根据题目要求,运行程序后首先要求用户输入用户名和密码,当用户名密码正确时才可进入,这就要用到shell编程中的变量,shell中的变量和C语言或是JAVA中的变量都有所不同,shell中的变量不需要事先声明,给一个变量赋值实际上就定义了一个变量,并且shell程序中的变量是无类型的。
我们定义两个变量name和password,由题目要求,用户名和密码需要由用户输入,因此我们定义的变量应该从键盘获取输入值,使用如下语句:
readnamepassword;
我们在开发程序前应先创建一个文件userinfo.dat用于存放用户的用户名和密码,当用户输入用户名和密码后就要判断该用户是否合法。
方法为从userinfo.dat文件中逐行读取数据,并判断是否与用户输入的用户名相同,当遇到相同的用户名时就表明该用户是合法的,可以退出文件的读取,转入判断该用户输入的密码是否正确。
从文件中逐行读取数据方法:
iftest-e/home/poe/userinfo.dat
then
whilereadu_nameu_password
do
iftest"
$name"
="
$u_name"
then
break;
else
continue;
fi
done<
/home/poe/userinfo.dat
用户名和密码正确后用户进入系统,系统显示用户签到成功,此时还要判断此时的时间是否大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat。
2、下班签出
将此函数定义为check_out(),前面部分和上一个函数check_in()相同,都为判断用户输入的用户名和密码。
不同之处在于记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat。
3、缺勤信息查阅
将此函数定义为look(),首先还是判断该用户输入的用户名和密码是否正确。
用户进入系统之后就要打印出该用户的签到信息,将check.dat中对应该用户的迟到早退信息查出并显示。
在这一步中,首先还是要从check.dat文件中逐行读取数据,不过并不直接打印,而是要等判断用户名后才能打印。
whilereadrecord
do
user=${record%%*};
iftest"
$user"
then
echo"
$record"
;
fi
done<
/home/poe/check.dat
其中user=${record%%*};
语句表示截取record字符串从左边起第一个空格前的字符串,也就是用户名,然后检查和该用户的用户名是否匹配,若匹配则打印否则读取下一条。
2、实验源码
#!
/bin/bash
functionshow(){
echo"
-----------------WelcometoAttandanceSystem--------------------"
-----------------1.checkin--------------------"
-----------------2.checkout--------------------"
-----------------3.late--------------------"
-----------------4.exit--------------------"
Pleaseinputyourchoice:
"
}
functioncheck_in(){
Pleaseinputyournameandpassword:
readnamepassword;
iftest-e/home/poe/userinfo.dat
iftest"
!
="
then
echo"
Sorry,yournameiswrong!
eliftest"
$password"
$u_password"
Sorry,yourpasswordiswrong!
else
Congratulation!
Youarecheckedinat`date`"
iftest`date+%H`-gt8
then
echo"
Youarelate!
$nameCheckedinat"
+`date`+"
.Late!
>
check.dat;
fi
else
echo"
Thereisnothisfile"
fi
functioncheck_out(){
Youarecheckedoutat"
+`date`;
iftest`date+%H`-lt18
Youareearlytoleave!
$nameCheckedoutat"
.Early!
check.dat;
fi
functionlook(){
whilereadrecord
functionmain(){
clear;
show;
readchoice;
case$choicein
1)check_in;
2)check_out;
3)look;
4)exit;
*)echo"
Pleaseinput1~4"
esac
main;
3、实验步骤及截图
进入终端,输入./attand.sh
实验2Linux高级程序设计-进程通信
1、实验目的
(1)了解Linux操作系统下应用程序开发流程
(2)掌握GNU工具链的使用
(3)了解Linux高级编程技巧(例如IPC机制、系统调用等)
2、实验内容
(1)编写一个简单的C语言程序,编写Makefile文件。
了解编译过程,并用gdb进行调试。
(2)以下任选其一:
1.编写一个多进程通信程序,采用MessageQueue或sharedMemory或者PipelineFile机制进行通信
2.编写一个实现读者-写者问题的程序,用信号量机制
备注:
读者-写者问题
设有一组共享数据DB和两组并发进程,一组进程只对此组数据执行读操作,另一组进程可对此组数据执行写操作(同时也可以执行读操作)。
将前面一组进程称为读者,后一组进程称为写者。
为了保证共享数据的完整性,要求:
(1)多个读者的操作可以同时进行
(2)多个写者的操作不可同时进行
(3)任何读者与写者的操作不可同时进行
3、实验要求
(1)写出源程序,并编译运行
(2)详细记录程序调试及运行结果
1、Makefile思路分析
在本实验中编写输入学生人数及分数,计算学生的总成绩以及平均成绩的程序,源程序如下:
/*main.c*/
#include<
stdio.h>
#include"
chengji.h"
intmain(){
intn,i;
floatsum,avg;
printf("
pleaseinputthenumberofstudents:
);
scanf("
%d"
&
n);
floatscore[n];
for(i=0;
i<
n;
i++){
printf("
pleaseinputthescoreofstudent[%d]"
i);
scanf("
score[i]);
}
sum=fun_sum(score,n);
avg=fun_avg(score,n);
thesumis%f,theavgis%f"
sum,avg);
/*chengji.h*/
floatfun_sum(floatarray[],intn);
floatfun_avg(floatarray[],intn);
/*fun_sum.c*/
floatfun_sum(floatarray[],intn){
floatsum=0.0;
for(inti=0;
i++)
sum+=array[i];
returnsum;
/*fun_avg.c*/
floatfun_avg(floatarray[],intn){
floatavg=0.0;
avg+=array[i];
avg/=n;
returnavg;
Makefile文件如下:
main:
main.ofun_sum.ofun_avg.o
gccmain.ofun_sum.ofun_avg.o-omain
main.o:
main.cchengji.h
gccmain.c-c
fun_sum.o:
fun_sum.c
gccfun_sum.c-c
fun_avg.o:
fun_avg.c
gccfun_avg.c-c
运行结果如下:
2、读者-写者思路分析
读写信号量的特点是:
1.同一时刻最多有一个写者(writer)获得锁;
2.同一时刻可以有多个读者(reader)获得锁;
3.同一时刻写者和读者不能同时获得锁;
由于读者可以同时获得锁,因此提高了系统的并发程度,进而提高了系统的性能。
源程序如下:
#include<
pthread.h>
unistd.h>
//定义数据类
classdata
{
public:
data(inti,floatf):
I(i),F(f)
{}
intI;
floatF;
};
//读者写者读写的内容
data*p_data=NULL;
pthread_rwlock_tlock;
//写者数目
constintWRITER_NUMBER=2;
void*reader(void*arg);
void*writer(void*arg);
intmain(intargc,char**argv)
pthread_treader_tid;
pthread_twriter_tid[WRITER_NUMBER];
pthread_create(&
reader_tid,NULL,reader,NULL);
for(inti=0;
i<
WRITER_NUMBER;
++i)
writer_tid[i],NULL,writer,(void*)i);
}
sleep
(1);
return0;
void*reader(void*arg)
longid=(long)arg;
pthread_detach(pthread_self());
while(true)
pthread_rwlock_rdlock(&
lock);
reader%disreadingthedata;
"
id);
if(p_data==NULL)
thedataisNULL\n"
else
thedatais(%d,%f)\n"
p_data->
I,p_data->
F);
pthread_rwlock_unlock(&
return(void*)0;
void*writer(void*arg)
pthread_rwlock_wrlock(&
writeriswritingthedata;
p_data=newdata(1,1.1f);
writercreatethedata(%d,%f)\n"
deletep_data;
p_data=NULL;
writerfreethedata\n"
实验三:
Proc文件系统
【实验目的】本实验作业将通过Proc文件系统观察整个系统的一些重要特征,并要求编写一个程序,利用Proc文件系统获得和修改系统的各种配置参数。
【实验内容】
1、以超级用户的身份登录Linux系统,并进入/proc目录,输入ls命令,查看该目录下的内容,同时查看每个文件的读、写权限。
并回答下列问题:
Ø
CPU的类型和型号
1Intel(R)Core(TM)i3-2350MCPU@2.30GHz
所使用的Linux的版本
Linuxubuntu4.8.0-52-generic#55~16.04.1-UbuntuSMPFriApr2814:
36:
29UTC2017x86_64x86_64x86_64GNU/Linux
从启动到当前时刻经过的时间
当前内存状态
2、编写一个程序,用来获得内核参数(任意的参数均可)
3、编写一个程序,用来修改内核参数(任意的参数均可)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 实验 报告