分享
分销 收藏 举报 申诉 / 17
播放页_导航下方通栏广告

类型Linux实验报告.doc

  • 上传人:Fis****915
  • 文档编号:553976
  • 上传时间:2023-12-07
  • 格式:DOC
  • 页数:17
  • 大小:437.50KB
  • 下载积分:6 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Linux 实验 报告
    资源描述:
    中南大学 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,由题目要求,用户名和密码需要由用户输入,因此我们定义的变量应该从键盘获取输入值,使用如下语句: read name password; 我们在开发程序前应先创建一个文件userinfo.dat用于存放用户的用户名和密码,当用户输入用户名和密码后就要判断该用户是否合法。方法为从userinfo.dat文件中逐行读取数据,并判断是否与用户输入的用户名相同,当遇到相同的用户名时就表明该用户是合法的,可以退出文件的读取,转入判断该用户输入的密码是否正确。 从文件中逐行读取数据方法: if test -e /home/poe/userinfo.dat then while read u_name u_password do if test "$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文件中逐行读取数据,不过并不直接打印,而是要等判断用户名后才能打印。 while read record do user=${record%% *}; if test "$user" = "$name" then echo "$record"; fi done < /home/poe/check.dat 其中user=${record%% *};语句表示截取record字符串从左边起第一个空格前的字符串,也就是用户名,然后检查和该用户的用户名是否匹配,若匹配则打印否则读取下一条。 二、 实验源码 #! /bin/bash function show(){ echo "-----------------Welcome to Attandance System--------------------"; echo "----------------- 1.check in --------------------"; echo "----------------- 2.check out --------------------"; echo "----------------- 3.late --------------------"; echo "----------------- 4.exit --------------------"; echo "Please input your choice:"; } function check_in(){ echo "Please input your name and password:"; read name password; if test -e /home/poe/userinfo.dat then while read u_name u_password do if test "$name" = "$u_name" then break; else continue; fi done < /home/poe/userinfo.dat if test "$name" != "$u_name" then echo "Sorry,your name is wrong!"; elif test "$password" != "$u_password" then echo "Sorry,your password is wrong!"; else echo "Congratulation! You are checked in at `date`"; if test `date +%H` -gt 8 then echo "You are late!"; echo "$name Checked in at "+`date`+".Late!">> check.dat; fi fi else echo "There is no this file"; fi } function check_out(){ echo "Please input your name and password:"; read name password; if test -e /home/poe/userinfo.dat then while read u_name u_password do if test "$name" = "$u_name" then break; else continue; fi done < /home/poe/userinfo.dat if test "$name" != "$u_name" then echo "Sorry,your name is wrong!"; elif test "$password" != "$u_password" then echo "Sorry,your password is wrong!"; else echo "Congratulation! You are checked out at "+`date`; if test `date +%H` -lt 18 then echo "You are early to leave!"; echo "$name Checked out at "+`date`+".Early!">>check.dat; fi fi else echo "There is no this file"; fi } function look(){ echo "Please input your name and password:"; read name password; if test -e /home/poe/userinfo.dat then while read u_name u_password do if test "$name" = "$u_name" then break; else continue; fi done < /home/poe/userinfo.dat if test "$name" != "$u_name" then echo "Sorry,your name is wrong!"; elif test "$password" != "$u_password" then echo "Sorry,your password is wrong!"; else while read record do user=${record%% *}; if test "$user" = "$name" then echo "$record"; fi done < /home/poe/check.dat fi else echo "There is no this file"; fi } function main(){ clear; show; read choice; case $choice in 1) check_in;; 2) check_out;; 3) look;; 4) exit;; *) echo "Please input 1~4";; esac } main; 三、 实验步骤及截图 进入终端,输入./attand.sh 实验2 Linux 高级程序设计-进程通信 1、实验目的 (1)了解Linux操作系统下应用程序开发流程 (2)掌握GNU工具链的使用 (3)了解Linux高级编程技巧(例如IPC机制、系统调用等) 2、实验内容 (1) 编写一个简单的C语言程序,编写Makefile文件。了解编译过程,并用gdb进行调试。 (2) 以下任选其一: 1. 编写一个多进程通信程序,采用Message Queue或shared Memory或者Pipeline File机制进行通信 2. 编写一个实现读者-写者问题的程序,用信号量机制 备注:读者-写者问题 设有一组共享数据DB和两组并发进程,一组进程只对此组数据执行读操作,另一组进程可对此组数据执行写操作(同时也可以执行读操作)。将前面一组进程称为读者,后一组进程称为写者。为了保证共享数据的完整性,要求: (1)多个读者的操作可以同时进行 (2)多个写者的操作不可同时进行 (3)任何读者与写者的操作不可同时进行 3、实验要求 (1) 写出源程序,并编译运行 (2) 详细记录程序调试及运行结果 一、 Makefile思路分析 在本实验中编写输入学生人数及分数,计算学生的总成绩以及平均成绩的程序,源程序如下: /*main.c*/ #include <stdio.h> #include "chengji.h" int main(){ int n,i; float sum,avg; printf("please input the number ofstudents:"); scanf("%d",&n); float score[n]; for(i=0;i<n;i++){ printf("please input the score of student[%d]",i); scanf("%d",&score[i]); } sum=fun_sum(score,n); avg=fun_avg(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;i<n;i++) sum+=array[i]; return sum; } /*fun_avg.c*/ float fun_avg(float array[],int n){ float avg=0.0; for(int i=0;i<n;i++) avg+=array[i]; avg/=n; return avg; } Makefile文件如下: main:main.o fun_sum.o fun_avg.o gcc main.o fun_sum.o fun_avg.o -o main main.o:main.c chengji.h gcc main.c -c fun_sum.o:fun_sum.c gcc fun_sum.c -c fun_avg.o:fun_avg.c gcc fun_avg.c -c 运行结果如下: 二、 读者-写者思路分析 读写信号量的特点是: 1. 同一时刻最多有一个写者(writer)获得锁; 2. 同一时刻可以有多个读者(reader)获得锁; 3. 同一时刻写者和读者不能同时获得锁; 由于读者可以同时获得锁,因此提高了系统的并发程度,进而提高了系统的性能。 源程序如下: #include <pthread.h> #include <stdio.h> #include <unistd.h> // 定义数据类 class data { public: data(int i, float f): I(i), F(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_tid[WRITER_NUMBER]; pthread_create(&reader_tid, NULL, reader, NULL); for (int i = 0; i < WRITER_NUMBER; ++i) { pthread_create(&writer_tid[i], NULL, writer, (void *)i); } sleep(1); return 0; } void *reader(void *arg) { long id = (long)arg; pthread_detach(pthread_self()); while (true) { pthread_rwlock_rdlock(&lock); printf("reader %d is reading the data; ", id); if (p_data == NULL) { printf("the data is NULL\n"); } else { printf("the data is (%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("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 data\n"); } pthread_rwlock_unlock(&lock); } return (void *)0; } 实验三: Proc文件系统 【实验目的】本实验作业将通过Proc文件系统观察整个系统的一些重要特征,并要求编写一个程序,利用Proc文件系统获得和修改系统的各种配置参数。 【实验内容】 1、以超级用户的身份登录Linux系统,并进入/proc目录,输入ls命令,查看该目录下的内容,同时查看每个文件的读、写权限。并回答下列问题: Ø CPU的类型和型号 1 Intel(R) Core(TM) i3-2350M CPU @ 2.30GHz Ø 所使用的Linux的版本 Linux ubuntu 4.8.0-52-generic #55~16.04.1-Ubuntu SMP Fri Apr 28 14:36:29 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux Ø 从启动到当前时刻经过的时间 Ø 当前内存状态 2、 编写一个程序,用来获得内核参数(任意的参数均可) 3、编写一个程序,用来修改内核参数(任意的参数均可)
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:Linux实验报告.doc
    链接地址:https://www.zixin.com.cn/doc/553976.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork