《Linux操作系统》实验报告模板
课程编号B080103040 Linux 操作系统 实验报告 姓 名 姚柯杰 学 号 ******** 班 级 软工 1212 指 导 教 师 石 凯 实验名称 Linux 操作系统实验 开 设 学 期 2014-2015 第 一 学 期 开 设 时 间 第1 1 周 第1 8 周 报告日期 评 定 成 绩 评定人 石 凯 评 定 日 期 东北大学软件学院 实验一 熟悉 Linux 环境 一、举例列出常用的 shell 命令使用方法 1.目录操作 (1)mkdir abc 创建一个目录 abc (2)cd /abc 将工作目录改变到 abc 3)cd 改变当前目录到主目录 4ls 列出当前目录的内容 5ls -l 输出当前目录内容的长列表,每个目录或文件占一行 6pwd 显示当前目录的全路径 2.文件显示实用程序 1cat mx.c 显示 mx.c 文件内容 2more mx.c 分屏显示 mx.c 内容 3cat file1 file2 连接 file1 和 file2 3 文件管理实用程序 1 cp file1 file2 将文件 1 复制到文件 2 2mv file1 file2 将文件重命名为 file2 3rm filename 删除文件 filename 二、通过实例写出 Linux 下 C 程序编辑运行过程。 在终端命令下输入 vi filename 命令,这里我输入 vi helloworld.c 创建并打开 helloworld.c 文件 按 i 进入编辑模式,输入下列 code include void mainvoid { Printf“hello world\n”;} 输入wq 保存退出 输入 cc helloworld.c 编译,在输入./a.out 运行 三、实验总结 在实验一中,我初步对 linux 有了初步的了解,能熟练目录和文件进行操作,并且能 用 linux 进行基本简单的基于 c 的编程。师傅领进门,修行在个人,算是通过这个实验进入 了 linux 的门。 实验二 文件操作 一、实现 CP 命令 实现思路提取出源路径和目标路径到函数中,放于定义的两个 int 变量,定义缓冲 区 buf,对两个变量进行判断,如果符合要求打开读取源文件信息存于缓冲区,然后写到目 标文件中,关闭两个文件以实现等同 cp 效果。 此处以 hello。C 文件为源文件,目标文件 1.c。 在调试 cp 命令中,由于一开始并未定义缓冲区,导致程序出错,后假如缓冲区,程序得以 正常运行。 二、实现 ls 命令 实现思路 调用dirent.h来实现打开目录流, 定义变量, 随后对变量进行判定用opendir、 readdir 打开并读取目录流,将值传递给另一个变量,打印出来。 编译源程序并运行 在实现 ls 命令中使用 man 手册查找需要的 dir 等目录流信息, man 是个强大的命令, 在编程 的过程中由于疏忽一开始并未假如判断条件, 有些突发情况会难以处理, 最后通过课件修过 过来。 三、设备文件操作 鼠标对应的设备文件是 /dev//mice 实验三 进程间通信 (一)进程的创建(必做题) 编写一段程序,使用系统调用 fork 创建两个子进程,在系统中有一个父进程和两个 子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示 字符“b” 和“c”。试观察记录屏幕上的显示结果,并分析原因。 创建一个新的子进程。其子进程会复制父进程的数据与堆栈空间。Fork 成功则在父进 程会返回新建立的子进程 pid, 而在新建立的子进程中则返回 0。 如果 fork 失败则直接返回 -1。所以在循环条件上出现上述情况。 修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏 幕上出现的现象,并分析其原因。(必做题) 子进程创建成功,到下一个 while,第二个子进程成功到最后循环,输入 parents1-500,随后 返回继续上面子进程的循环输出。 【思考题】 1.系统是怎样创建进程的 答在 UNIX 系统中,只有 0 进程是在系统引导时被创建的, 在系统初启时由 0 进程创建 1 进程,以后 0 进程变成对换进程,1 进程成为系统中的始祖进 程。 UNIX利用fork 为每个终端创建一个子进程为用户服务, 每个终端进程又可利用fork 来创建其子进程,从而形成一棵进程树。 2.当前运行的程序(主进程)的父进程是什么 建立如下的 c 文件来获取 pid 得到这三个进程 pid,可见父进程的 pid 是 5182。 (二)信号量机制实验 【实验内容】 1.编写一段程序,使用系统调用 fork 创建两个子进程,再用系统调用 signal 让父进 程捕捉键盘上来的中断信号(即按 ctrlc 键),当捕捉到中断信号后,父进程用系统调用 kill 向两个子进程发出信号,子进程捕捉到父进程发来的信号后,分别输出下列信息后 终止 Child process 1 is killed by parent Child process 2 is killed by parent 父进程等待两个子进程终止后,输出以下信息后终止 Parent process is killed 实验要求 ⑴ 运行程序并分析结果。 ⑵ 如果把 signalSIGINT,stop放在①号和②号位置,结果会怎样并分析原因。 ⑶ 该程序段前面部分用了两个 wait0,为什么 ⑷ 该程序段中每个进程退出时都用了语句 exit0,为什么 程序代码 include include include include include include int wait_mark; void waiting,stop; void main { int p1, p2; signalSIGINT,stop; whilep1fork-1; ifp10 {// whilep2fork -1; ifp20 { // wait_mark1; waiting0; killp1,10; killp2,12; waiting; waiting; printf“parent process is killed\n“; exit0; } else { wait_mark1; signal12,stop; waiting; lockf1,1,0; printf“child process 2 is killed by parent\n“; lockf1,0,0; exit0; } } else { wait_mark1; signal10,stop; waiting