2022年浙江大学Linux程序设计实验报告_第1页
2022年浙江大学Linux程序设计实验报告_第2页
2022年浙江大学Linux程序设计实验报告_第3页
2022年浙江大学Linux程序设计实验报告_第4页
2022年浙江大学Linux程序设计实验报告_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

1、Linux程序设计实验报告1操作系统基本命令使用一、实验目的1通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法;2通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。二、实验任务与要求1emacs的使用,要求能新建、编辑、保存一个文本文件2vi或vim的使用,要求能新建、编辑、保存一个文本文件3gedit的使用,要求能新建、编辑、保存一个文本文件4掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录5掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文

2、件、新建文件、查看文件、文件重命名、删除文件等操作。三、实验工具与准备计算机PC机,Linux Redhat Fedora Core6操作系统四、实验步骤与操作指导任务1学习emacs的使用,要求能新建、编辑、保存一个文本文件(1)启动emacs(2)输入以下C程序(3)保存文件为kk.c(4)用emacs打开文件kk.c(5)修改程序(6)另存为文件aa.txt并退出。任务2vi或vim的使用,要求能新建、编辑、保存一个文本文件(1)点击”应用程序” “附件”“终端”,打开终端,在终端输入命令:rootlocalhost root#vi kk.c按i键,进入插入状态。(2)输入以下C程序 #

3、include int main( ) printf(“Hello world!n”); return 0;此时可以用Backspace、键编辑文本。(3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。(4)用vi打开文件kk.c,输入命令:rootlocalhost root#vi kk.c(5)修改程序为:#includeint main( ) printf( Hello world!n); printf(*n); return 0;(6) 按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.tx

4、t并退出vi。 图1 程序编辑环境任务3gedit的使用,要求能新建、编辑、保存一个文本文件(1)启动gedit,点击”应用程序” “附件”“文本编辑器”,打开文本编辑器,如图所示。(2)输入以下C程序(3)保存文件为kk.c(4)用gedit打开文件kk.c(5)修改程序(6)另存为文件aa.txt并退出。任务4掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录(1)打开终端”应用程序” “附件”“终端”,在终端用命令新建目录kkk rootlocalhost root#mkdir kkk(2)进入目录kkk,并在kkk目录下新建目录kkka,进入kkka目录 rootlocal

5、host root#cd kkkrootlocalhost kkk#mkdir kkkarootlocalhost kkk#cd kkkarootlocalhost kkka#(3)执行命令cd . 命令,然后再进入kkka目录,输入命令cd 、cd /etc,观察其结果。rootlocalhost kkka#cd .rootlocalhost kkk#cd kkkarootlocalhost kkka#cdrootlocalhost root#cd /etcrootlocalhost etc# 任务5掌握cp、ls、mv、chmod、rm命令的基本操作,要求能拷贝文件、新建文件、查看文件的权

6、限、修改文件以及删除文件。(1)在kkka目录下建立文件kk.c rootlocalhost root#cd /root/kkk/kkka rootlocalhost kkka#vi kk.c(2)查看文件kk.c的属性 rootlocalhost kkka#ls kk.c -l 编辑kk.c文本,并用:wq存盘。(3)把kk.c更名为aa.c rootlocalhost kkka#mv kk.c aa.c(4)把文件夹/root/kkk/kkka下的文件aa.c拷贝到/root/kkk目录下,文件取名为kk.crootlocalhost kkka#cp aa.c /root/kkk/kk.c

7、(5)修改文件kk.c的权限,使得文件所有者为可读、可写、可执行,对组内人及其他人可读、不可写、不可执行。rootlocalhost kkka#cd .rootlocalhost kkk#chmod u=rwx,go=r kk.c此时可用命令ls查看rootlocalhost kkk#ls -l(6)删除文件与文件夹删除kkka文件夹下的文件aa.crootlocalhost kkk#rm kkka/aa.c查看文件夹kkka下否删除了文件aa.crootlocalhost kkkls kkka/aa.c -l删除kkka文件夹下rootlocalhost kkk#rmdir kkka查看是否

8、删除了文件夹rootlocalhost kkkls kkka -l(7) 新建一个linux_d目录,并设置它的权限为666。(8)在指定的目录中搜索文件,利用find命令搜索含有通配符的文件*.c。(9)练习命令:pingnetstatmountifconfig (10)在根目录下用find查找.c文件。(11)练习检查磁盘命令fdisk的使用。列出结果中有关/dev/sd的磁盘信息。/sbin/fdisk -l |grep /dev/sd (12)设置当前的时间为2013年10月01日10点23分。(13)在后台运行命令gedit,并用命令kill杀死gedit的进程。(14)检查磁盘,列

9、出目录/dev/sd的磁盘信息。(15)查找/usr/sbin及/usr/bin/两个目录中所有的C语言程序。(16)统计当前目录下txt文件的总字节数。(17)把ps命令的标准输出结果输入给sort,经过排序后结果被保存到pssort.out中。五、实验结果记录任务2vi或vim的使用1、输入vi kk.c创建kk.c文件并用vi编辑,在最后行输入wq保存退出2、输入vi kk.c打开该文件,修改文件,在最后行输入wq! aa.txt另存为aa.txt文件并退出任务3gedit的使用输入gedit命令打开gedit编辑器,输入以下文字,保存为kk.c在保存目录下输入gedit kk.c打开,

10、使用ctrl+h替换,另存为aa.txt任务4掌握mkdir、cd命令的操作输入mkdir kkk新建目录kkkcd kkk进入kkk文件夹mkdir kkka新建目录kkkacd kkka进入kkka文件夹,结果如图输入cd .返回上级目录,cd kkka再进入kkka文件夹输入cd进入用户主目录,即root文件夹,可使用pwd命令查看当前路径输入cd/etc进入etc文件夹任务5掌握cp、ls、mv、chmod、rm命令的基本操作输入cd /home/brs/work/kkk/kkka 即绝对路径,可直接进入指定文件夹,vi kk.c建立文件编辑保存后,输入ls kk.c l查看指定文件详

11、细属性输入mv kk.c aa.c将文件kk.c重命名为aa.c(此时mv命令源文件和目标文件在同一文件夹下,故起到重命名作用)输入cp aa.c /home/brs/work/kkk/kk.c将aa.c文件拷贝到kkk下并命名为aa.c输入chmod u=rwx,go=r kk.c修改文件权限,所有者读写运行,组内可读,查看输入rm kkka/aa.c删除kkka文件夹下aa.c文件,使用ls命令查看是否删除输入rmdir kkka删除kkka文件夹,再次查看是否删除新建一个linux_d目录,设置权限为使用chmod 666 linux_d设置其权限为可读可写可执行输入find /home

12、/brs/work/kkk -name *.c 在指定目录搜索.c文件输入find -name *.c 在根目录下搜索.c文件输入ping HYPERLINK .com查看与百度连接情况,使用ctrl+c中断输入netstat显示各种网络相关信息,如网络连接,路由表,接口状态输入ifconfig查看网络配置信息,如IP地址mount /dev/sda1 /mnt/usb将设备名为sda1的U盘挂载至/mnt/usb使用umount /mnt/usb卸载U盘输入/sbin/fdisk l|grep /dev/sd列出有关/dev/sd的磁盘信息,此处使用管道命令|将fdisk的输出作为grep的

13、参数输入输入date -s 10:23:00 设置系统时间输入gedit& 在后台运行gedit,此时输入ps查看gedit进程PID号为100963,再输入kill -9 100963结束进程。输入find /usr -name *.c 查找usr目录下所有.c文件10、输入wc c *.txt统计当前目录下txt文件的总字节数输入ps sort result 把ps命令的标准输出结果输入给sort,经过排序后结果被保存到result中六、实验结果分析通过使用shell命令可直接完成文件命令操作,文本文件的编辑,并更改简单的系统设置七、实验心得(思考和意见) Linux的shell命令让用户

14、可以使用功能强大的命令,完成一些windows上无法完成或繁琐的操作,为以后程序的编写,系统管理提供了便利,我们应熟练掌握这些基础知识。 在学习过程中遇到了不少问题,通过网络得到了解决。sodu apt-get命令在使用vi编辑器时,上下左右按键变成了ABCD,这是由于vi版本号不同所造成的,此时需要使用sudo apt-get remove vim卸载原版vim,再输入sodu apt-get install vim安装最新版本,便可解决问题。此外sudo apt-get upgrade 用于更新已安装的软件。su命令以常规用户登录时权限不足,在修改系统文件时会遭到拒绝,此时输入su及roo

15、t密码可临时切换至root用户,获取最高命令。rmdir命令只能删除空文件夹,若要删除非空文件夹,应使用rm r开机登陆界面输入密码后无法进入桌面,此时按下ctrl+alt+F1可进入tty命令行,实际上F1-F6对应6个本地命令台,而F7对应图形界面,修改完成后按下ctrl+alt+F7即可返回图形界面。Linux程序设计实验报告2SHELL程序设计1一、实验目的1Shell程序设计中变量的使用;2理解通道的概念并初步掌握它的使用方法;3掌握算术操作、字符串操作、逻辑操作、文件操作;4掌握if then fi、if then elif fi、case、while、for等控制语句;5在she

16、ll脚本中使用函数; 二、实验任务与要求1.观察变量$#,$0,$1,$2,$3,$的含义2.SHELL程序设计中文件与文件夹的判断3.顺序、分支、循环程序的设计4.菜单程序的编写三、实验工具与准备计算机PC机,Linux Redhat Fedora Core6操作系统四、实验步骤与操作指导任务1调试下列shell程序,写出变量$#,$0,$1,$2,$3,$的含义。#! /bin/bashecho “程序名:$0”echo “所有参数: $”echo “前三个参数:$1 $2 $3”shiftecho “程序名:$0”echo “所有参数: $”echo “前三个参数:$1 $2 $3”sh

17、ift 3echo “程序名:$0”echo “所有参数: $”echo “前三个参数:$1 $2 $3”exit 0修改程序,使用变量$#,程序运行时从键盘输入文件名,判断文件是否存在,如果存在,显示文件内容。提示:read DORFif -d $DORF then ls $DORF elif -f $DORF任务2编写一个shell程序,此程序的功能是:显示root下的文件信息,然后建立一个kk的文件夹,在此文件夹下新建一个文件aa,修改此文件的权限为可执行。提示:进入root目录:cd /root显示root目录下的文件信息:ls l新建文件夹kk:mkdir kk进入root/kk目录

18、:cd kk新建一个文件aa:vi aa #编辑完成后需手工保存修改aa文件的权限为可执行:chmod +x aa回到root目录:cd /root请修改程序,所建立的目录名从键盘输入,把/root下的所有文件信息保存在aa文件中。任务3调试下列shell程序,此程序的功能是:利用内部变量和位置参数编写一个名为test2的简单删除程序,如删除的文件名为a,则在终端输入的命令为 test a。提示:除命令外至少还有一个位置参数,即$#不能为0,删除的文件为$1。(1)用vi编辑程序rootlocalhost bin#vi test2#!/bin/sh if test $# -eq 0 then

19、echo Please specify a file! else gzip $1 /先对文件进行压缩 mv $1.gz $HOME/dustbin /移动到回收站 echo File $1 is deleted !fi (2) 请修改程序,查看回收站中的文件,从键盘输入回收站中的某一文件,把此文件恢复到/home目录下。(3)删除垃圾箱中的所有文件。任务4调试下列程序,程序的主要思想是用while循环求1到100的和。 (1)用gedit编辑脚本程序test12rootlocalhost bin#gedit test12 total=0 num=0 while(num替换-还原IFSBAK=$

20、IFS (备份原来的值) - IFS=,(替换) - IFS=$IFSBAK (还原)7、使用bc计算器时,用scale=n来精确到n位小数 在shell程序中使用a=echo”scale=n;x+y” | bc来进行运算 七、实验心得(思考和意见)1、内部参数在shell编程中十分有用,应熟练掌握$0 :程序所在的路径$# :传递给程序的总的参数数目$? :shell程序在shell中退出的情况,正常退出返回0,反之为非0值$* :传递给程序的所有参数组成的字符串赋值时等号左右无空格使用$(command)格式进行命令替换,如echo $(date)将输出Thu Jul 23 17:10:3

21、8 CST 2015Linux程序设计实验报告3SHELL程序设计2一、实验目的1提高Shell程序编程的技巧;2提升综合shell编程能力。二、实验任务与要求1.菜单的实现2.遍历所有以该目录为祖先的文件3.分支与循环、随机数在游戏程序中的应用4.定时检查存储空间文件的变化5.消息框程序设计6.菜单界面程序设计三、实验工具与准备计算机PC机,Linux Redhat Fedora Core6操作系统实验步骤与操作指导任务1.编写下列程序。程序的功能是要实现如下菜单所表示的功能。 请输入您要清空的文件类型 1文件夹 2其他文件 3所有文件 0没想好,先退出任务2.调试下列shell程序。补充完

22、整以下Shell程序,要求输入一个目录名,函数list的功能是遍历所有以该目录为祖先的文件,大致实现命令“ls -R”的功能。#!/bin/shlist()cd $1ls -lfor i in $(ls $1)do if -d $i then directory=$1/$i echo The directory $directory is a subdirectory of $1, which includes: list $directory cd $1 fi done 任务3.调试下列shell程序,这是一个小游戏,阅读程序,写出这个游戏的玩法。#!/bin/bashfor i in $(

23、 seq 1 54 ) #初始化牌do ok$i=1donemax=0 #初始化赢家for i in $(seq 1 4 ) #游戏开始do echo Player $i #玩家i 的回合 a=$(RANDOM%53+1) #抽牌 while $ok$a -eq 0 ; do a=$(RANDOM%53+1) done ok$a=0 if $a -gt $max ; then max=$a num=$i fi HuaSe=$(a%4) #生成花色 case $HuaSe in 0)HS=C; #草花 1)HS=D; #方块 2)HS=H; #红心 3)HS=S; #黑心 esac DaXiao

24、=$(a/4+1) #生成牌值case $DaXiao in 2|3|4|5|6|7|8|9|10) echo $HS $DaXiao; 11)echo $HS J; 12)echo $HS Q; 13)echo $HS K; 1 )echo $HS A; 14)echo small JOKE ; #小王 15)echo big JOKE ; #大王 esac read lldoneecho Player $num win ! #游戏结果任务4.编写下列shell程序。编写一个程序,每隔5分钟检查一下当前用户(假设用户名为liujh)是否有新的邮件,若有则提示用户。提示题目的关键问题是获取5分

25、钟前后此文件夹的存储容量,如果邮件箱中存储容量发生变化,则可判断有新邮件到达。提示关键语句: count1=ls -l /var/mail/liujh|awk print $5 echo $count1 sleep 300 #隔5分钟检测一次 count2=ls -l /var/mail/liujh|awk print $5 echo $count2 if $count1 -eq $count2 任务5.调试下列程序,程序调试后把此程序改写为游戏菜单控制程序。#! /bin/shdialog -title Start -msgboxdialog -title Welcome to the St

26、art Menu.dialog -title Confirm -yesno Do you want to enter the Menu? 9 18if $? != 0; then dialog -infobox Welcome! sleep 2 dialog -clear exit 0fidialog -menu MENU 12 24 3 1 CO Player 2 Radio 3 Sound Control 2_1.txtM_O = $(cat _1.txt)if $M_O = 1 ; then !gnome-cdelif $M_O = 2 ; then !gnome-sound-recor

27、derelse !gnome-volume-controlfiexit 0任务6.调试下列程序。程序功能是设计了一个简单的调查问卷菜单界面,调查学生一些个人信息。此程序运用了GUI图形化界面、使用了条件语句,case语句,使用户可以对菜单进行选择,并将选择结果保存在临时文件中,便于进一步操作计算。程序的源代码为:#!/bin/shgdialog -title Questionnaire -yesno Will you participate in this survey? 9 18if( $? != 0 ); then gdialog -infobox Thank you sleep 1 gd

28、ialog -clear exit 0figdialog -title Questionnaire -msgbox This is a survey about your personal information 9 18gdialog -title Questionnaire -inputbox Enter your name 9 18 2name.txt_name=$(cat name.txt)gdialog -menu $_name, what is your major? 9 18 3 1 Liberal Art 2 Science3 Computer Science 2choice.

29、txt_choice=$(cat choice.txt)case $_choice in 1) gdialog -title Questionnaire -msgbox Good choice 9 18 ; 2) gdialog -title Questionnaire -msgbox Excellent 9 18 ; *) gdialog -title Questionnaire -checklist Choose the lanuage you learned 9 18 5 1 C off 2 C+ off 3 Java off 4 Ruby off 5 Delpi off;esacsle

30、ep 1gdialog -clearexit 0问题(1)分析整个程序的功能层次图;(2)在程序中提取5条新语句,或您认为有用的语句,分析它所对应的功能;(3)仿照程序,请编写类似功能属于自己开发的小程序。实验结果记录实验结果分析七、实验心得(思考和意见)Linux程序设计实验报告4 Linux系统C开发工具一、实验目的1掌握linux环境下C程序的编辑、编译、运行等操作;2掌握多文件系统的编译及连接库存的生成、应用;3初步掌握gdb调度方法;4初步掌握makefile工程文件的编写与使用;5掌握系统函数的应用。二、实验任务与要求1.函数库的创建;2.makefile工程文件的编写;3.应用g

31、db调试程序;4.使用GCC编译时连接库的使用。三、实验工具与准备计算机PC机,Linux Redhat Fedora Core6操作系统四、实验步骤与操作指导任务1.调试下列程序。程序通过创建一个小型函数库,它包含两个函数,然后在一个示例程序中调用其中一个函数。这两个函数分别是pro1和pro2。按下面步骤生成函数库及测试函数库。步骤1 为两个函数分别创建各自的源文件(将它们分别命名为pro1.c和pro2.c)。rootlocalhost root# cat pro1.c#include void pro1(int arg)printf(“hello:%dn”,arg) ;rootloca

32、lhost root# cat pro2.c#include void pro2(char *arg)printf(“您好:%sn”,arg) ;步骤2 分别编译这两个函数,产生要包含在库文件中的目标文件。这通过调用带有-c选项的gcc编译器来实现,-c选项的作用是阻止编译器创建一个完整的程序,gcc将把源程序编译成目标程序,文件名为以.o结尾。如果此时试图创建一个完整的程序将不会成功,因为还未定义main函数。rootlocalhost root# gcc -c pro1.c pro2.crootlocalhost root# ls *.opro1.o pro2.o步骤3 现在编写一个调用p

33、ro2函数的程序。首先,为库文件创建一个头文件lib.h。这个头文件将声明库文件中的函数,它应该被所有希望使用库文件的应用程序所包含。rootlocalhost root# cat lib.h/*lib.h:pro1.c,pro2.c*/void pro1(int);void pro2(char *);步骤4 主程序(program.c)非常简单。它包含库的头文件并且调用库中的一个函数。rootlocalhost root# cat program.c#include “lib.h”int main()pro2(“Linux world”);exit(0);步骤5 现在,来编译并测试这个程序。

34、暂时为编译器显式指定目标文件,然后要求编译器编译的文件并将其与预先编译好的目标模块pro2.o链接。rootlocalhost root# gcc -c program.crootlocalhost root# gcc -o program program.o pro2.orootlocalhost root# ./program您好:Linux world步骤6 现在,创建并使用一个库文件。用ar程序创建一个归档文件并将目标文件添加进去。这个程序之所以称为ar,是因为它将若干单独的文件归并到一个大的文件中以创建归档文件。注意,也可以用ar程序来创建任何类型文件的归档文件。rootlocalh

35、ost root# ar crv libfoo.a pro1.o pro2.o函数库现在即可使用了。可以在编译器命令行的文件列表中添加该库文件以创建程序,如下所示:rootlocalhost root# gcc -o program program.o libfoo.arootlocalhost root# ./program您好:Linux world也可以用-l选项来访问函数库,但是因为其未保存在标准位置,所以必须用-L选项来指示gcc在何处可以找到它,如下所示:rootlocalhost root#gcc -o program program.o -L. -lfoo-L.选项指示编译器在

36、当前目录”.”中查找函数库。-lfoo选项指示编译器使用名为libfoo.a的函数库(或者名为libfoo.so的共享库,如果它存在的话)。要查看目标文件、函数库或可执行文件里包含的函数, 可使用nm命令。如果查看program和libfoo.a,就会看到函数库libfoo.a中包含pro1和pro2两个函数,而 program里只包含函数pro2。创建程序时,它只包含函数库中它实际需要的函数。虽然程序中的头文件包含函数库中所有函数的声明,但这并不将整个函数库包含在最终的程序中。问题:(1)按照给出的步骤1-6调试程序;(2)编写两个函数,其中一个求数组中的最大值与最小值,另一函数求某一数的个

37、数及main函数,建立一个库,对程序进行调试;(3)试写出问题(2)中的makefile工程文件。任务2.调试下列程序。#includeint main()char passwd13;char *key;char slat2;key= getpass(“Input First Password:”);slat0=key0;slat1=key1;strcpy(passwd,crypt(key slat);key=getpass(“Input Second Password:”);slat0=passwd0;slat1=passwd1;printf(“After crypt(),1st passw

38、d :%sn”,passwd);printf(“After crypt(),2nd passwd:%s n”,crypt(key slat); 请写出调试命令。任务3.程序设计题。在home/kk目录下编写一个a.h库文件,在root目录下编写一个含main函数的主程序,在main函数中调用在a.h中的一个函数。任务4. 调试下列程序。调试目的是实现多文件编译。文件结构是: (1)bubble.h 存放函数bubble的声明。 (2)bubble.c 存放函数bubble的实现。 (3)main.c 存放main函数实现,其中调用了bubble函数。 (4)补充完整makefile文件 其中各

39、文件中的代码如下:bubble.h#ifndef _BUBBLE_H_#define _BUBBLE_H_void bubble(int* a, int n);#endif / _BUBBLE_H_bubble.c#include bubble.hvoid bubble(int* a, int n)int i, j, t;for(i = 1; i n; i+)for(j = 0; j aj + 1)t = aj;aj = aj + 1;aj + 1 = t;main.c#include #include bubble.h#define COUNT 10int main(void)int i;i

40、nt aCOUNT = 3, 5, 4, 8, 9, 6, 2, 1, 7, 0;bubble(a, COUNT);for(i = 0; i COUNT; i+)printf(%d , ai);printf(n);return 0;MakefileCC = gccFLAGS = -Wall -O2main: main.o bubble.o(请补充完整makefile文件)任务5. 程序调试。程序的功能是输入两个整数,输出两个整数间的所有自然数。步骤1 设计编辑源程序代码。rootlocalhost root#vim 4-3.c程序代码如下:#include int num(int x, int

41、 y); int main() int a1,a2,min_int; printf(请输入第一个整数:);scanf(%d,&a1); printf(请输入第二个整数:);scanf(%d,&a2); num(a1,a2); int num(int x, int y) int temp,i; if (xy)temp=x;x=y;y=temp;for(i=x;i=y;i+) printf(“%5d”,i);printf(“n”);return 0; 步骤2 用gcc编译程序。在编译的时候要加上选项“-g”。这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件,请写出编译命令

42、。rootlocalhost root# 步骤3 进入gdb调试环境。gdb进行调试的是可执行文件,因此要调试的是4-3而不是4-3.c,输入如下,请输入gdb的调试命令:rootlocalhost root#回车后就进入了gdb调试模式。GNU gdb Red Hat Linux (5.3post-0.18rh)Copyright 2003 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it

43、and/or distribute copies of it under certain conditions.Type show copying to see the conditions.There is absolutely no warranty for GDB. Type show warranty for details.This GDB was configured as i386-redhat-linux-gnu.(gdb)图4.1 进入gdb调试环境可以看到,在gdb的启动画面中有gdb的版本号、使用的库文件等信息,在gdb的调试环境中,提示符是“(gdb)”。步骤4 用gd

44、b调试程序。(1)查看源文件在gdb中输入“l”(list)就可以查看程序源代码,一次显示10行。可以看出,gdb列出的源代码中明确地给出了对应的行号,这样可以大大方便代码的定位。(2)设置断点设置断点在调试程序时是一个非常重要的手段,它可以使程序到一定位置暂停运行。软件工程师可以在断点处查看变量的值、堆栈情况等,从而找出代码的问题所在。在gdb中设置断点命令是“b”(break),后面跟行号或者函数名。不指定具体行号的断点设置在“b”(break)后面跟函数名。本例可以输入“break num”。(3)查看断点信息设置完断点后,可以用命令“info b”(info break)查看断点信息。

45、(4)运行程序接下来可以运行程序,可以输入“r”(run)开始运行程序。(5)查看与设置变量值调试程序重要手段就是查看断点处的变量值。程序运行到断点处会自动暂停,此时输入“p变量名”可查看指定变量的值。调试程序时,若需要修改变量值,可程序运行到断点处时,输入“set 变量=设定值”,例如,给变量“a2” 赋值100,输入“set a2=100”。gdb在显示变量值时都会在对应值前加“$n”标记,它是当前变量值的引用标记,以后想再引用此变量,可以直接使用“$n”,提高了调试效率。(6)单步运行很多情况下,调试的时候要单步运行程序。在断点处输入 “n”(next)或者“s”(step)可单步运行。

46、它们之间的区别在于:若有函数,调用时,“s”会进入该函数,而“n”不会进入该函数。(7)继续运行程序在查看完变量或堆栈情况后可以输入“c”(continue)命令恢复程序的正常运行,把剩余的程序执行完,并显示执行结果。(8)退出gdb环境退出gdb环境只要输入“q”(quit)命令,回车后退出gdb环境。五、实验结果记录 六、实验结果分析七、实验心得(思考和意见)Linux程序设计实验报告5Linux环境系统函数的应用一、实验目的1掌握随机数函数的使用方法;2掌握结构体struct timeval的成员tv_sec与tv_usec的应用;3掌握时间函数time、localtime、gettim

47、eofday的使用;4. 掌握系统函数system、tcgetattr等的应用。二、实验任务与要求1. 随机数函数的使用;2. 猜数游戏的程序;3. 结构体struct timeval的成员tv_sec与tv_usec的应用;4. 时间函数在简单记事本程序中的应用;5. 时间函数在计时器,有暂停、查看、重置程序设计设计中的应用。三、实验工具与准备计算机PC机,Linux Redhat Fedora Core6操作系统。四、实验步骤与操作指导任务1.调试下列程序。产生10个介于1到10之间的随机数值。提示函数rand( )会返回一个0 RAND_MAX(其值为47)之间的随机值。产生一个大于等于

48、0、小于1的数,此数可表示为:rand()/(RAND_MAX+1.0)。rootlocalhost root#vim 5-1.c程序代码如下:#include #include stdio.hint main() int i,j; srand(int)time(0); for(i=0;i10;i+) j=1+(int)(10.0*rand()/(RAND_MAX+1.0); printf( %d ,j); printf(“n”);问题论述语句srand(int)time(0);的功能;修改程序,产生50个100-1000之间的随机整数;任务2程序设计。编写一个猜数游戏的程序,先产生一个随机数

49、,要求被试输入一个数,计算机会提示猜大了,猜小了或恭喜您猜中了,直到猜中,退出程序。修改程序,限定猜数的次数作为难度系数,除了提示猜大了,猜小了或恭喜您猜中了外,还有次数已到,猜数失败。任务3调试下列程序。应用结构体struct timeval的成员tv_sec与tv_usec显示系统时间的秒与微秒,并测试输出成员tv_sec与tv_usec这段程序所用时间。提示程序设计的步骤为用函数gettimeofday读取系统时间,显示系统中的秒与微妙,显示Greenwich的时间差,测试系统时间tvz,计算时间差。操作步骤步骤1 编辑源程序代码。rootlocalhost root#vim 5-2.c

50、程序代码如下: #include#includeint main()struct timeval tv1,tv2;struct timezone tz;gettimeofday(&tv1,&tz);printf(tv_sec; %dn, tv1.tv_sec) ;printf(tv_usec; %dn,tv1.tv_usec);gettimeofday(&tv2,&tz);printf(tv2_usec-tv1_usec; %dn,tv2.tv_usec-tv1.tv_usec);return 0;问题(1)修改以上程序,分别编写一个有参数的函数及宏定义,研究它们的调用效率问题;(2) 编写一

51、个程序,如查找或排序效率问题,查找算法有顺序、二分查找等等。任务4.编写程序。编写一个简单的记事本,其功能是实现输入任务及任务截止时间,通过系统时间和日期函数的使用,可计算输出任务的剩余时间。提示:printf(请输入任务截止时间,分别输入日期131,小时023、分、秒对应的数字n);scanf(%d%d%d%d, &i,&j,&k,&l);为对应的输入时间,即余下时间可以从以下语句中得到。time (&timep);p=localtime(&timep);a=(i-p-tm_mday)*24*3600+( j-p-tm_hour)*3600+ (k-p-tm_min)*60+ l-p-tm_

52、sec;在余下时间为0时可以考虑响铃及显示任务。任务5调试下列程序。#include#include#include#include#includeint mygetch() /实时返回键盘被按下的值struct termios oldt, newt;int ch;tcgetattr(STDIN_FILENO,&oldt);newt = oldt;newt.c_lflag &= (ICANON|ECHO);tcsetattr(STDIN_FILENO,TCSANOW,&newt);ch = getchar();tcsetattr(STDIN_FILENO,TCSANOW,&oldt);retu

53、rn ch;int main()char c, v;int i, rn = 0, n;struct timeval tv1, tv2;struct timezone tz;double sum = 0, prob = 0;srand(unsigned)time(NULL);printf(Please input the number of tests:);scanf(%d,&n);getchar();while(n) for(i = 0; i n; i+) c = (char)(1.0+(int)(25.0*rand()/RAND_MAX)+65.0); printf(0335;5H%c,c)

54、; sleep(0.5); gettimeofday(&tv1,&tz); system(clear); v = mygetch(); gettimeofday(&tv2,&tz); if(v = c) rn+;sum+=(tv2.tv_sec-tv1.tv_sec)+(tv2.tv_usec-tv1.tv_usec)/1000000.0; prob = rn / n;system(clear); if(prob = 0)/全都按错时鼓励下并提醒是不是忘记打开大写开关 printf(sorry, you score 0, please try again, maybe you forgot t

55、o switch the Caps Lock onn);else printf(the accuracy is %lf, and the average time of response is %lf secsn,prob,sum/rn);printf(Please input the number of tests(input 0 to quit):);scanf(%d,&n);getchar();rn = 0;sum = 0; /把rn和sum清零问题(1)调试程序,分析并画出程序执行的流程图;(2) 修改程序,编写界面更为优美的测试程序。任务6.调试下列程序。程序的功能是计时器,有暂停、

56、查看、重置等功能#include#include#include#includeint main()long int begin,sec,stop;struct timeval tv1, tv2;struct timezone tz;char tmp;begin=0;stop=0;sec=0;system(clear);printf(计时器程序(单位s)n);printf(输入b(begin)计时器开始计时n);printf(输入w(watch)查看已经累计时间n);printf(输入r(rest)重新开始计时n);printf(输入s(stop)暂停计时器n);printf(输入e(end)

57、结束计时器n);while(1)scanf(%c,&tmp);if(tmp=b)if(begin=1&stop=0) printf(计时器已经启动!n);if(begin=0&stop=0) printf(计时器启动n);gettimeofday(&tv1,&tz);sec=0;begin=1;if(stop=1)gettimeofday(&tv1,&tz);stop=0;printf(暂停结束!n);if(tmp=w)if(stop=0)gettimeofday(&tv2,&tz);printf(已经计时%ld秒n,sec+tv2.tv_sec-tv1.tv_sec);if(stop=1)

58、printf(已经计时%ld秒n,sec);if(tmp=s)if(stop=1)printf(计时已经暂停!n);if(stop=0)gettimeofday(&tv2,&tz);sec=sec+tv2.tv_sec-tv1.tv_sec;printf(计时暂停,已经计时%ld秒n,sec);stop=1;if(tmp=r)gettimeofday(&tv2,&tz);printf(已经计时%ld秒n,sec+tv2.tv_sec-tv1.tv_sec);printf(计时器在5秒后被重置!n);sleep(5);begin=0;sec=0;stop=0;system(clear);prin

59、tf(计时器程序(单位s)n);printf(输入b(begin)计时器开始计时n);printf(输入w(watch)查看已经累计时间n);printf(输入r(rest)重新开始计时n);printf(输入s(stop)暂停计时器n);printf(输入e(end)结束计时器n);if(tmp=e) break;return 0;五、实验结果记录六、实验结果分析七、实验心得(思考和意见)Linux程序设计实验报告6 Linux文件I/O操作1一、实验目的1掌握函数stat中文件属性的应用。2掌握系统函数system、opendir、scandir的使用。3初步掌握struct dirent

60、 的结构体变量的使用方法。4掌握文件阻塞与非阻塞I/O的操作。5. 掌握文件属性的判断。二、实验任务与要求1.测试文件S_IRUSR、S_IWUSR、S_IRGRP、S_IROTH属性。2.应用system函数对网站的网络连通情况进行测试。3.应用readdir函数显示文件和子目录。4.文件属性的判断。5.阻塞I/O文件操作的程序设计。三、实验工具与准备计算机PC机,Linux Redhat Fedora Core6操作系统四、实验步骤与操作指导任务1.程序设计。设计程序应用system函数建立/home/liu文件,应用chmod函数使文件liu具有S_IRUSR、S_IWUSR、S_IRG

温馨提示

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

评论

0/150

提交评论