Linux实验报告.doc

上传人:wj 文档编号:1220677 上传时间:2023-04-30 格式:DOC 页数:17 大小:381KB
下载 相关 举报
Linux实验报告.doc_第1页
第1页 / 共17页
Linux实验报告.doc_第2页
第2页 / 共17页
Linux实验报告.doc_第3页
第3页 / 共17页
Linux实验报告.doc_第4页
第4页 / 共17页
Linux实验报告.doc_第5页
第5页 / 共17页
Linux实验报告.doc_第6页
第6页 / 共17页
Linux实验报告.doc_第7页
第7页 / 共17页
Linux实验报告.doc_第8页
第8页 / 共17页
Linux实验报告.doc_第9页
第9页 / 共17页
Linux实验报告.doc_第10页
第10页 / 共17页
Linux实验报告.doc_第11页
第11页 / 共17页
Linux实验报告.doc_第12页
第12页 / 共17页
Linux实验报告.doc_第13页
第13页 / 共17页
Linux实验报告.doc_第14页
第14页 / 共17页
Linux实验报告.doc_第15页
第15页 / 共17页
Linux实验报告.doc_第16页
第16页 / 共17页
Linux实验报告.doc_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Linux实验报告.doc

《Linux实验报告.doc》由会员分享,可在线阅读,更多相关《Linux实验报告.doc(17页珍藏版)》请在冰点文库上搜索。

Linux实验报告.doc

中南大学

Linux系统实验报告

目录

实验一····································3~9

实验二···································10~16

实验三··································17~17

实验一Shell程序设计 

[实验目的]

理解Shell程序的设计方法;熟悉Shell程序的编辑、运行、调试方法与过程。

 

[实验内容]考勤模拟Shell程序设计

用shell设计一个考勤模拟程序,实现如下功能选择界面:

1.上班签到

2.下班签出

3.缺勤信息查阅

4.退出

考勤程序运行后,提示用户输入上述功能选择,并验证用户输入的用户名和密码;用户信息保存在userinfo.dat中。

如果是上班签到,记录签到信息,如果签到时间大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat。

如果是下班签出,记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat。

如果用户选择缺勤信息查询,则将check.dat中对应该用户的迟到早退信息查出并显示。

用户选择功能执行完,shell程序继续回到功能选择界面等待下一个用户进行操作。

一、实验分析

本实验是shell程序设计,主要目的是理解shell程序的设计方法以及熟悉shell程序的编辑、运行、调试方法与过程。

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

用户名和密码正确后用户进入系统,系统显示用户签到成功,此时还要判断此时的时间是否大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat。

2、下班签出

将此函数定义为check_out(),前面部分和上一个函数check_in()相同,都为判断用户输入的用户名和密码。

不同之处在于记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat。

3、缺勤信息查阅

将此函数定义为look(),首先还是判断该用户输入的用户名和密码是否正确。

用户进入系统之后就要打印出该用户的签到信息,将check.dat中对应该用户的迟到早退信息查出并显示。

在这一步中,首先还是要从check.dat文件中逐行读取数据,不过并不直接打印,而是要等判断用户名后才能打印。

whilereadrecord

do

user=${record%%*};

iftest"$user"="$name"

then

echo"$record";

fi

done

其中user=${record%%*};语句表示截取record字符串从左边起第一个空格前的字符串,也就是用户名,然后检查和该用户的用户名是否匹配,若匹配则打印否则读取下一条。

二、实验源码

#!

/bin/bash

functionshow(){

echo"-----------------WelcometoAttandanceSystem--------------------";

echo"-----------------1.checkin--------------------";

echo"-----------------2.checkout--------------------";

echo"-----------------3.late--------------------";

echo"-----------------4.exit--------------------";

echo"Pleaseinputyourchoice:

";

}

functioncheck_in(){

echo"Pleaseinputyournameandpassword:

";

readnamepassword;

iftest-e/home/poe/userinfo.dat

then

whilereadu_nameu_password

do

iftest"$name"="$u_name"

then

break;

else

continue;

fi

done

iftest"$name"!

="$u_name"

then

echo"Sorry,yournameiswrong!

";

eliftest"$password"!

="$u_password"

then

echo"Sorry,yourpasswordiswrong!

";

else

echo"Congratulation!

Youarecheckedinat`date`";

iftest`date+%H`-gt8

then

echo"Youarelate!

";

echo"$nameCheckedinat"+`date`+".Late!

">>check.dat;

fi

fi

else

echo"Thereisnothisfile";

fi

}

functioncheck_out(){

echo"Pleaseinputyournameandpassword:

";

readnamepassword;

iftest-e/home/poe/userinfo.dat

then

whilereadu_nameu_password

do

iftest"$name"="$u_name"

then

break;

else

continue;

fi

done

iftest"$name"!

="$u_name"

then

echo"Sorry,yournameiswrong!

";

eliftest"$password"!

="$u_password"

then

echo"Sorry,yourpasswordiswrong!

";

else

echo"Congratulation!

Youarecheckedoutat"+`date`;

iftest`date+%H`-lt18

then

echo"Youareearlytoleave!

";

echo"$nameCheckedoutat"+`date`+".Early!

">>check.dat;

fi

fi

else

echo"Thereisnothisfile";

fi

}

functionlook(){

echo"Pleaseinputyournameandpassword:

";

readnamepassword;

iftest-e/home/poe/userinfo.dat

then

whilereadu_nameu_password

do

iftest"$name"="$u_name"

then

break;

else

continue;

fi

done

iftest"$name"!

="$u_name"

then

echo"Sorry,yournameiswrong!

";

eliftest"$password"!

="$u_password"

then

echo"Sorry,yourpasswordiswrong!

";

else

whilereadrecord

do

user=${record%%*};

iftest"$user"="$name"

then

echo"$record";

fi

done

fi

else

echo"Thereisnothisfile";

fi

}

functionmain(){

clear;

show;

readchoice;

case$choicein

1)check_in;;

2)check_out;;

3)look;;

4)exit;;

*)echo"Pleaseinput1~4";;

esac

}

main;

三、实验步骤及截图

进入终端,输入./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)详细记录程序调试及运行结果

一、Makefile思路分析

在本实验中编写输入学生人数及分数,计算学生的总成绩以及平均成绩的程序,源程序如下:

/*main.c*/

#include

#include"chengji.h"

intmain(){

intn,i;

floatsum,avg;

printf("pleaseinputthenumberofstudents:

");

scanf("%d",&n);

floatscore[n];

for(i=0;i

printf("pleaseinputthescoreofstudent[%d]",i);

scanf("%d",&score[i]);

}

sum=fun_sum(score,n);

avg=fun_avg(score,n);

printf("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;

for(inti=0;i

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

运行结果如下:

二、读者-写者思路分析

读写信号量的特点是:

1.同一时刻最多有一个写者(writer)获得锁;

2.同一时刻可以有多个读者(reader)获得锁;

3.同一时刻写者和读者不能同时获得锁;

由于读者可以同时获得锁,因此提高了系统的并发程度,进而提高了系统的性能。

源程序如下:

#include

#include

#include

//定义数据类

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

{

pthread_create(&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);

printf("reader%disreadingthedata;",id);

if(p_data==NULL)

{

printf("thedataisNULL\n");

}

else

{

printf("thedatais(%d,%f)\n",p_data->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("writeriswritingthedata;");

if(p_data==NULL)

{

p_data=newdata(1,1.1f);

printf("writercreatethedata(%d,%f)\n",p_data->I,p_data->F);

}

else

{

deletep_data;

p_data=NULL;

printf("writerfreethedata\n");

}

pthread_rwlock_unlock(&lock);

}

return(void*)0;

}

实验三:

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模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2