资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Linux和Unix编程基础实验指导书易军凯 编北京化工大学信息科学与技术学院2007年12月前言操作系统是计算机最重要的系统软件,是计算机应用的基础。Unix系统是至今最优秀的操作系统,虽历经几十年,有许多变化,但基本的体系结构保持稳定。更难能可贵的是,在计算机发展如此迅速的今天,Unix系统仍以其安全、稳定及强大的处理能力,仍为最主要的操作系统,计算机发展到几天,很多问题还依赖于Unix系统。结合上课内容完成Unix上机练习。上机从系统基本命令入手,由浅入深,抽丝剥茧地将Unix编程实现逐步表现出来,同时针对不同的实现方法和命令展开深入的编程。上课内容将用大量篇幅分析多个Unix系统命令的实现方法,循序渐进地让实践者理解并逐步精通Unix系统编程,进而具有编制Unix应用程序的能力。针对上课内容,在上机实践过程中大量练习实际编程,能够处理多种Unix应用编程中出现的错误。为了更深入地帮助学生理解和掌握这些知识点,本课程提供了8学时的上机实践课时,分六次实验(每次2个学时),所列如下:(1) 修改who2.c能够支持whoami;(2) 修改ls1.c能够支持文件排序;(3) mesg命令编程;(4) 进程控制编程;(5) 关于more的终端控制编程;(6) 终端窗口大小改变的响应编程。这些实验对于理解unix/linux编程知识点是必不可少的。经验表明大量的上机编程实践,多参与项目研发是学生熟练掌握编程的重要途径。上面的实验都假定在以下环境下进行:(1) 操作系统:linux;(2) 开发语言:C/C+;(3) 编译器:gcc/cc/g+/c+。如需要更改到其他环境,请参考其他操作系统的相关资料,以便顺利进行上述实验。为了确保上机实验效果,要求在实验中遵循以下要求:(1) 实验前认真预习实验内容和要求;(2) 根据自身知识的掌握情况,选定实验内容;(3) 上机实验过程中,完成编码工作;(4) 对编写的程序进行认真的分析,发现存在的问题,并进行测试;(5) 独立撰写严谨的、条理通顺的、字迹端正的实验报告。目录实验一 修改WHO2.C能够支持WHOAMI3实验二 修改LS1.C能够支持文件排序6实验三 MESG命令编程8实验四 进程控制编程10实验五 关于MORE的终端控制编程12实验六 终端窗口大小改变的响应编程14实验一 修改who2.c能够支持whoami1.1 实验目的(1) 初步了解unix编程步骤;(2) 了解如何登陆unix/linux操作系统以及建立自己的用户;(3) 熟悉联机帮助和读文件函数;(4) 了解who命令能做些什么工作;(5) who命令是如何工作的;(6) unix/linux上常用文本编辑器是如何输入文本的;(7) 如何编写who命令;(8) 如何使用unix/linux环境下的编译器;(9) 如何编写makefile文件。1.2 实验要求(1) 熟练掌握unix/linux开机步骤以及能够建立自己的用户;(2) 仔细阅读联机帮助文档;(3) 读文件函数是如何实现的;(4) 熟练掌握vi和emacs编辑器;(5) 熟练掌握makefile文件的制作方法;(6) 熟练掌握编译器的使用;(7) 学会如何跟踪调试所编程序;(8) 认真学习who命令的实现原理。1.3 实验内容(1) unix/linux开机以及建立新用户。由于unix/linux不同于windows操作系统,所以开机步骤也不一样,所以要仔细查看开机步骤。另外一定要建立自己的用户,并且在以后的操作中完全在自己的用户中进行各种命令和编程的操作。(2) 查看联机帮助,了解whoami的功能。who命令实现了查看当前服务器上有哪些用户在线,从哪里终端登陆服务器以及登陆时间等一系列属性。whoami实现了自己登陆服务器的用户是谁,并列举出自己登陆的属性。(3) 在编写程序前先了解vi/emacs编辑器的功能。通过联机帮助熟练编辑器,可以输入自己的第一个程序,并且能够的独立操作编辑器的插入、删除和修改等命令。(4) 对who2.c进行修改编程实现whoami功能。教材中已经实现了who2.c程序,能够在一定程度上表达出了who 功能。首先学生应该调试该程序成功,在此基础上通过第一步了解whoami 命令功能,改进who2.c 程序,达到whoami 功能。这是学生所写第一个unix/linux程序。(5) 使用gcc/cc/c+/g+编译器。学生通过查看联机帮助,能够了解unix/linux上常用编译器,可以利用编译命令编译出自己的第一个执行程序,并且比较这四个编译器的差别和各自的优缺点。(6) 编写makefile文件。在上面步骤中已经能够用编译命令编译出自己的执行程序了。这一步主要是学会把自己的编译命令写入makefile 文件中,通过执行make 命令直接编译出程序。(7) 进一步编程实现whoami命令。利用编辑器改进who2.c 程序,完成makefile 文件,完全达到whoami 功能。1.4 实验步骤(1) 开机进入unix/linux 操作系统,这时登陆进入root 用户,利用adduser/useradd 命令建立自己的用户,然后重启计算机退出root 用户,进入使用自己的用户登陆。(2) 在$提示符下输入vi myfile 命令,建立自己的第一个unix/linux文件,按下a或i键尝试输入一些文本。因为vi有两种状态:编辑和查看。如果想转入查看状态,可按ESC键。在vi中使用存盘退出、不存盘退出或及时存盘命令。(3) 通过查看联机帮助命令man 对make 命令和编译命令gcc/cc/c+/g+,部分掌握其命令功能。(4) 查看whoami 命令的功能。(5) 改进who2.c 程序,实现whoami 功能,进行编译执行;(6) 编写实验报告。1.5 实验提示由于学生初次接触unix/linux操作系统,对其操作和命令应该还比较陌生,所以在上机前一定要查阅大量的资料,有条件的学生最好是在自己的电脑上安装linux操作系统。这里主要说明两个方面的提示:makefile 和程序的编译。(1) makefile 文件制作$vi makefiletest: test.cppg+ -o test test.cpp在输入以上命令后存盘退出,建立自己的makefile 文件。这里假设自己的源文件是test.cpp,编译器是g+。注意在g+字符前必须是tab键,不能用空格代替。这时可以在提示符下输入以下命令来编译程序得到test执行文件。如果源文件有语法错误,编译器会提示。$make testg+ -o test test.cpp(2) 编译器的使用由于编译器可以带各种参数,在第一次实验中只需掌握基本编译命令,以上面test.cpp为例,得到执行文件test,可按以下命令。$g+ -o test test.cpp如果只需得到中间文件,可按以下命令,得到test.o文件。$g+ -o test.cpp实验二 修改ls1.c能够支持文件排序2.1 实验目的(1) 知道目录是文件的列表;(2) 了解unix/linux系统的目录结构;(3) 熟悉目录操作的系统函数;(4) 文件类型以及如何知道文件的类型;(5) 文件属性以及如何知道文件的属性;(6) 位操作以及掩码的使用;(7) 用户与组ID以及password 数据库;(8) 对字符串的排序操作。2.2 实验要求(1) 需要详细了解unix/linux目录结构;(2) 对位以及掩码操作需要熟练掌握;(3) 知道用户与组ID和password数据库的存放位置以及具体文件;(4) 掌握字符串的排序函数;(5) 进一步写出ls1.c 的改进本,支持文件排序。2.3 实验内容(1) 查看联机帮助,了解ls的功能。由于ls是用于列举出指定目录下的文件以及子目录,并且具有统计排序功能。教材中ls1.c 已经实现了枚举文件和子目录功能,需要进一步改进以实现排序,以此为基础,深入掌握unix/linux编程。(2) 第一步先用编辑器完成ls1.c 的录入,并把教材中没有的代码补齐,能够在操作系统中真正运行。因为教材中代码往往是省略的,需要读者通过查找资料修改其源码完善程序。当然还是要按照第一个实验的方法编写makefile 文件,实现编译自动化。(3) 在ls1.c中嵌入文件排序函数,形成ls2.c 程序,利用qsort快速排序算法能够对目录参数内的文件实现排序。2.4 实验步骤(1) 开机进入unix/linux 操作系统,进入自己的用户登陆。(2) 联机帮助的查阅,仔细阅读ls功能。(3) 录入ls1.c 源代码,修改补齐教材中的错误处,进行调试,完成实现基本列举文件及子目录功能。(4) 改进ls1.c 程序,对指定目录内的文件或子目录实现排序功能;(5) 编写实验报告。2.5 实验提示因为字符串排序算法是数据结构内的重要内容,如果有不清楚之处需要重新学习数据结构的排序算法,这里给出了一种快速算法。#include #include #include int sort_function( const void *a, const void *b); char list54 = cat, car, cab, cap, can ; int main(void) int x; qsort(void *)list, 5, sizeof(list0), sort_function); for (x = 0; x 5; x+) printf(%sn, listx); return 0; int sort_function( const void *a, const void *b) return( strcmp(a,b) ); 实验三 mesg命令编程3.1 实验目的(1) 了解unix系统的终端操作;(2) 熟悉终端操作系统函数;(3) 熟悉在unix/linux操作系统下如何调试执行程序;(4) 熟悉用户终端的属性获取函数;(5) 熟悉如何修改用户终端属性;(6) 进一步熟悉unix/linux编程,实现mesg功能。3.2 实验要求(1) 查看联机帮助,了解mesg功能;(2) 对于执行程序的调试工具gdb需要详细了解;(3) 终端属性获取过程;(4) 中断属性的重新设置过程;(5) 进一步熟悉制作makefile 文件以及更熟练使用编辑器和编译器;(6) 编程实现mesg功能。3.3 实验内容(1) 联机帮助查阅mesg功能,这个命令主要实现不想被其他用户在同一台服务器上发送文本打扰。这里需要了解用户所在终端的属性获取以及重新设置功能;(2) 对于unix/linux编程不只是实现,更需要对代码进行优化,所以学生需要加强C语言的学习。在该实验中强调代码优化,尽量使程序更简洁,运行效率更高。在编写代码完成后,对所写代码进一步检查,把不必要的变量和过程去掉,循环终止条件可更灵活。同时要求学生对main的形
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号