1、操作系统实验指导安全操作系统实验指导书2007-12-5绪论实验报告内容1,命令接口的使用2,多进程程序设计(同步、互斥、通信)3,linux的文件操作4,Socket网络编程实验报告的格式和要求实验报告的格式1,封皮(姓名 班级 学号)2,试验目的3,实验内容4,试验步骤5,试验结论实验报告的要求按照要求格式,字体用宋体,字号小四每个实验报告篇幅控制在6-8页总共8次试验课,需要写4个实验报告以班级为单位按时上交实验内容1,linux基本命令的使用: ls、cd、chmod等命令的使用2,linux命令接口的使用: Vi编辑器与shell程序的编写3,linux的C语言开发: gcc、gdb
2、、make的使用4,linux多线程设计: fork等系统调用的使用5,linux下程序的同步: 同步算法的实现6,linux下程序的通信: 进程间的通信7,linux的文件操作: 有关文件操作的系统调用8,linux下的网络程序设计实验一 基本命令的使用实验目的 熟悉linux的基本命令 熟悉运用Linux的在线求助系统。(man info help)实验内容1,文件与磁盘操作man/info cd ls(-a -l -h -t) cp(-R -f -l) mv cat/less/more pwd mkdir rm(-r -f) chmod -R user:group file find(-
3、name -user) grep df(-h) mount /umount clear time 2,用户管理useradd (-g -d -s -G) userdel (-r) passwd groupadd/groupdel gpasswd(-a -d) su kernelversion hostname3,软件安装rpm( -i -e -ivh -U -q -qa -qd -ql -qi -qR)tar4,网络命令ifconfig(up/down) netstate (-t -p -u)5,进程管理ps (-a -f -x) pstree -pu kill -9 pid ldconfig
4、killall reboot halt实验二 命令接口的使用实验目的 1熟练使用vi编辑器 2,熟悉Shell程序的设计实验内容: 1 vi编辑器的使用1,三种模式进入命令模式vi 进入编辑模式i/I a/A o/O ESC进入特殊模式:q :q! :e!:w :wq :wq file :n1,n2 w file:r file:e filename :!command2,光标移动b e j k l h 0 $ ctrl+f ctrl+bn+space n+enter 6G G H L3,删除操作x dw D dd4,替换操作r cw C cc5,查询命令/abc ?abc n N :n1,n2
5、 s/word1/word2/gc6,拷贝粘贴y Y 2yy p P 7,其他命令:set nu; :set nonu; u .;v y pgf CTRL-SHIFT-62 shell程序的编写环境变量 echo env set $ “” ? (1)熟悉shell script的结构和运行、调试方法。(2)熟悉shell script的变量声明方法及其输入输出。declare i a=3;read(3)熟悉shell script的分支结构。编写shell script文件test1.sh,判断用户根目录下是否有名为test的文件或者目录,如果有的话,将其删除。if -e test ; the
6、n xxx else xxx fi (4)熟悉shell script的循环结构。编写shell script文件test2.sh,实现1到100所有奇数的和并输出。试验三 linux的C语言开发试验目的 熟悉gcc的使用 熟悉gdb的使用 熟悉make的使用试验内容1 gcc (1)过程gcc hello.c o hello输入 选项 输出 命令 注释.c -E .i cpp 预编译,文件包含、条件编译、宏展开.i -S .s cc1 编译,生成汇编文件,注意命令的路径.s -c .o as 汇编,生成目标文件.o ELF ld 链接(2)常用选项-v 显示进度-Wall 显示警告信息-I
7、头文件路径,不要空格-L 库路径,不要空格-lName库名字(libName.或者libName.so)-shared 编译成共享库-static 链接静态库-fpicfPIC 编译成共享库-On 优化-Dmacro=BAR在命令行定义预处理宏FOO,其值为BAR -Wl,option 传递给ld程序option 选项,比如-Wl,-dn和-Wl,-dy注意区别:gcc hello.c o hello.static Wl,-dn-Bstatic-staticgcc hello.c o hello.dynaticWl,-dy-Bdynamic 默认(3)c+编写hello.cxx程序:#incl
8、ude using namespce std;int main()Cout”hello”/etc/ld.so.conf #ldconfig #ldconfig pwd /更新缓存无效 #export LD_LIBRARY_PATH=. /另开shell则无效c)共享调用gcc test2.c -o test2 -I ./ -L ./ -Wl,-dy laddsub-Wl,-dy用于指定链接动态库版本,默认d)动态调用Linux 提供 4 个库函数(dlopen, dlerror, dlsym 和 dlclose),一个 include 文件(dlfcn.h)以及两个共享库(静态库 libdl.
9、a 和动态库 libdl.so),以支持动态链接装入器。gcc test2.c -o test2 ldl参考:#include #include int main() int a,b; scanf(%d,%d,&a,&b); void *pHandle; int (*sub)(int m,int n); pHandle=dlopen(libsub.so,RTLD_LAZY); sub=dlsym(pHandle,sub); printf(%dn,sub(a,b); dlclose(pHandle); return 0;附:几个命令ldd 查看文件的依赖关系nm 查看文件的符号表,比如:nm t
10、est2|grep addobjdump 查看文件的信息2 gdb(1) 准备gcc -g(2) 打开gdb filename/file filename(3) 运行run/next/step(进入子程序)/continue(4) 设置断点break/delete(5) 显示表达式的值 print exp 立即输出表达式的值 watch exp 表达式的值发生变化时,程序停止并输出其新旧值 display exp 程序一旦停止就显示表达式的值(6) 显示栈的信息 backtrace/backtrace full frame traceNum(7) 显示程序的信息 list/list num/l
11、ist func info breakpoints/info break info func/into var /info files info local /info prog/info args disassemble func/info frame/ examine(x) addr(8) 退出quit 帮助help 执行命令 shell command str3 make(1) Make命本: Make flags macro definitions targets flags如果没有-f参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。在Linu
12、x中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。 macro definitionsmakefile文件中的变量定义 targetsmake的目标,默认是makefile文件中的第一个目标(2) makefile文件:规则的集合 a:b command a为目标。可以是.o,也可以是ELF,还可以是一个伪目标。 b为依赖文件。就是,要生成那个a所需要的文件或是目标。 command也就是make需要执行的,从b生成a的命令 (3)其他变量: 定义 CFLAGS=-c 引用 $(CFLAGS) 特殊变量
13、$目标文件,$所有的依赖文件,$第一个依赖文件命令: 不显示命令内容 命令出错不处理 - 多条相关命令 ;伪目标与自动推导: add.o : addsub.h .PHONY : clean clean : rm edit $(objects)文件搜索: 特殊变量 VPATH=./include:./include 特殊指令 vpath %.h ./include:./include4 实验任务(1)编写程序:main函数所在的文件名字为test3.c,程序功能为从键盘输入两个数求其和(调用add.c中的函数)和差(调用sub.c中的函数)。(2)编写一个makefile文件,并用make编译刚
14、才的程序(3)设置断点,观察点,调试程序实验四 linux多进程设计实验目的1.了解进程与程序的区别,加深对进程概念的理解;2.了解fork( )系统调用的返回值,掌握用fork()创建进程的方法;实验内容 1,用vi输入下面的程序,编译、调试、输出结果 #include #include int main() pid_t child_pid; /*fork函数 *作用:系统调用,产生一个子进程,调用一次返回两次 *返回值:pid_t类型,在头文件中定义,通常为整形 * 0 子进程返回 * ID 父进程返回的子进程ID */ child_pid=fork(); if(child_pid=0)
15、int i=0; for(;i5;i+) printf(childn); sleep(1);/wait one second else printf(childs pid is %d,child_pid); int j=0; for(;i5;i+) printf(childn); sleep(1); return 0; 2,用man察看fork、sleep的用法 3,试验任务编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I
16、am daughter”。实验五 Linux进程间的同步实验目的1.掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串行执行;2.熟悉wait、exit等系统调用。 3.熟悉信号同步的方法。实验内容 1.用man察看wait、exit的用法 2.修改实验四的程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。实验六 Linux进程间的通信实验目的学习如何利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信,并加深对上述通信机制的理解。实验内容1了解系统调用pipe()、msgget()、msgsnd(
17、)、msgrcv()、msgctl()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程。semget() semop() semctl()2编写一C语言程序,使其用管道来实现父子进程间通信。子进程向父进程发送字符串“is sending a message to parent!”;父进程则从管道中读出子进程发来的消息,并将其显示到屏幕上,然后终止。3运行该程序,观察、记录并简单分析其运行结果。实验七 Linux文件操作实验目的复习标准C语言的文件操作函数,熟悉linux有关文件操作的系统调用,并理解他们之间的关系。实验内容1、标准的文件操作的函数 #incl
18、ude 文件指针(FILE) fopen/fclose,fread/fwrite,fputc/fgetc,fprintf/fscanf,fseek/frewind,remove,rename,feof 2、系统调用中的文件操作 #include #incldue #include #include 文件描述符(int) open/close,creat/unlink,read/write,lseek,eof mkdir/rmdir,opendir/closedir,readdir,stat,access3建立一个目录(mkdir),在目录下建立两个文件(creat)a.txt、b.bin;在a
19、.txt中输入你的姓名和学号;在b.bin中输入你的年龄的二进制表示。4.编写程序实现对文本文件指定行的读取。附录man的使用1,man的介绍 linux下的man页包括用户命令、系统调用、库函数等的帮助文档。其中每一类别对应一个section,每一个section对应一个数字id。常用的类别以及对应的数字如下:(1) 用户命令User commands(2) 系统调用System calls(3) 标准库函数Standard library functions(8) 系统管理命令System/administrative commands2,man的命令行参数详细参考#man man,常见的
20、有(以sleep为例子)#man sleep 显示用户命令(1)中sleep的man页#man 3 sleep 显示库函数(3)中sleep的man页#man -f sleep 显示名称为sleep的所有man页#man -k sleep 显示行描述中包含sleep的所有man页#man -K sleep 显示页内包含sleep的所有man页3,man的浏览命令详细输入h或者H查看,常见的有w 向下翻一页d 向上翻半页f 向上翻一页e 向下翻一行y 向上翻一行/str 向下搜索strstr 向上搜索strn 下一个strhelp命令1,ar help2,(gdb)help等设置环境变量:全局设置:直接修改 /etc/profile针对用户修改:修改 /.bashrc /.bash_profie添加变量:export PEAK=“zhao feng”:peakzhao:$PEAK删除变量:unset PEAK其他命令:env/set
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1