2023年8月2日发(作者:)
目 录
第一章Linux命令 ..............................................................................................................................1
1.1 Linux操作系统简介 ..............................................................................................................1
1.2 虚拟机操作流程 ....................................................................................................................2
1.3 Linux文件与目录的基本操作 ..............................................................................................2
第二章 Vi编辑器 .............................................................................................................................12
2.1 Vi编辑器简介 ......................................................................................................................12
2.2 Vi 编辑器操作 .....................................................................................................................13
第三章Linux下C语言编程 ............................................................................................................16
3.1 gcc简介 ................................................................................................................................16
3.2 Linux下C语言编程 ............................................................................................................16
3.3 gdb调试 ................................................................................................................................19
第四章 进程控制和通信 ..................................................................................................................21
4.1 进程控制 ..............................................................................................................................21
4.2 Linux下进程控制实现 ........................................................................................................21
4.3 进程通信 ..............................................................................................................................23
4.4 Linux下管道通信实现 ........................................................................................................23
结 论 ................................................................................................................................................25 Linux操作系统实训报告
1.1 Linux操作系统简介
第一章Linux命令
Linux的起源:
UNIX系统的快速发展,引起了计算机科学家Andrew Tanenbaum的强烈好感,为了方便学生更好的了解操作系统的工作原理,他开发了一个迷你的UNIX,即Minix系统。1991年10月,芬兰赫尔辛基的学生Linuxs Torvalds在Minix的基础上开发了大约一万行的代码,将其发布到论坛上供大家下载,后来在众多黑客的开发下,终于在1994年3月14日发布了Linux1.0版本。此后Linux各种版本开始流行起来。1999年发布了Linux中文版本。
严格的说,Linux不算是一个操作系统,只是一个操作系统的内核,即计算机软件与硬件之间通信的平台;Linux的全称是GNU/Linux,这才算是一个真正意义上的Linux系统。GNU是Richard Stallman 组织的一个项目,世界各地的程序员可以编写GNU程序,同时遵循GPL协议,允许任何人随意更改。不过,修改后的程序也要遵守GPL协议。
Linux的特点:
● 完全免费。由于Linux遵循通用的公共许可证GPL,因此任何人有使用、拷贝和修改Linux的自由。
● 高效安全稳定。UNIX操作系统的稳定性是众所周知的,Linux继承了UNIX核心的设计思想,具有执行效率高、安全和稳定性好的特点。
● 支持多种硬件平台。Linux能在笔记本电脑、PC机、工作站、甚至大型机上运行,并能在x86、MIPS、PowerPC、SPARC、和Alpha等主流的体系结构上运行。
● 友好的用户界面。Linux提供了类似Windows图形界面的X-Windows系统,用户可以使用鼠标方便、直观、快捷的进行操作。
● 强大的网络功能。网络是Linux的生命,完善的网络支持是Linux与生俱来的能力,所有Linux在通信和网络功能方面优于其他操作系统。
● 支持多任务、多用户。Linux是多任务、多用户的操作系统,可以支持多个使用者同时使用并共享系统的磁盘、外设和处理器等系统资源。Linux的保护机制使每个应用程序和用户互不干扰,任何一个任务不崩溃,其他任务仍然正常运行。
0Linux操作系统实训报告1.2 虚拟机操作流程
Vmware Workstation6 是目前比较主流的虚拟机软件,也是唯一的能在Windows和Linux主机平台上运行的虚拟计算机软件。它能真实的模拟物理计算机的所有基本功能,是多平台学习不可或缺的虚拟软件。
首先,打开Vmware Workstation6虚拟机软件,在主界面中选择Red Had Enterprise
Linux4虚拟计算机系统,点击Commands框架中的“Start this Virtual machine”按钮,运行Red
Had Enterprise Linux4虚拟系统。
1.3 Linux文件与目录的基本操作
1.3.1 文件与文件名
Linux的文件名长度可以达到256个字符,但不能使用以下字符做文件名:
!@#$%^&*()[]{}’”;<>空格
Linux区分大小写ABCAbc不同
文件名中如果有多个小数点,最右边的一个为分隔符,表示文件的类型,如.txt,.c
1.3.2 目录
“/”为根目录、目录分隔符和目录与文件的分隔符。如:/home/feng/。
1.3.3 文件与目录的常用命令
1. man 命令
⑴ man语法:man 命令符
⑵ man 命令说明:对你熟悉或不熟悉的命令提供帮助解释(按空格键显示下一页,按b键返回,按q键退出)。
⑶ 使用权限:所有用户。
⑷ 范例:
例1:显示vi命令的帮助解释,如图1-1所示。
[Root@linux root]# man vi
1Linux操作系统实训报告
图1-1man命令查看vi帮助
2. ls 命令
⑴ ls语法:ls[选项|参数]目录名
⑵ ls命令说明:用于显示指定目录或文件的相关信息。
⑶ 使用权限:所有用户。
⑷ ls命令参数选项见表1-1。
表1-1 ls命令参数选项
选项选项
-a
-l
功能
显示所有文件和目录,包括隐含文件
显示文件的完整信息
-F
d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件(link)
表示文件或者目录许可权限,分别用可读(r),可写(w),可运行(x)。
在每个文件名的后面或是前面添加一个特定的后缀字符的方法指出它的类型
/:子目录
*:可执行文件
无:普通文件
.开头:隐含文件
-r
-t
-A
-R
将文件以反次序显示(依英文字母顺序)
将文件依建立时间的先后顺序列出,后建的排在前面
同-a,但不列出“.”当前目录和“..”父目录
若目录下有文件,则列出其下文件
⑸ 范例:
2Linux操作系统实训报告
例1:显示目录或文件的详细列表并以创建时间的先后反次序显示,如图1-2所示。
图1-2 显示列表
例2:显示目录(子目录不为空时显示子目录)详细列表,如图1-3所示。
图1-3 显示详细列表(R参数)
例3:显示所有文件和目录,包括隐含文件但不列出“.”当前目录和“..”父目录,在每个文件名的后面或是前面添加一个特定的后缀字符的方法指出它的类型,如图1-4所示。
图1-4 AF参数结果
3. mkdir 命令
3Linux操作系统实训报告
⑴ mkdir语法:mkdir[选项|参数]目录名
⑵ mkdir命令说明:用于创建目录。
⑶ 使用权限:所有用户。
⑷ mkdir命令参数选项:
-p:确保目录名称存在,不存在的话就创建一个。
-m:在创建目录时设置目录权限。
⑸ 范例:
例1:使用自己的学号和姓名各创建一个子目录,并用ls 命令观察结果,如图1-5所示。
图1-5 使用mkdir命令创建子目录
例2:创建一个已经存在的子目录,观察显示结果,如图1-6所示。
图1-6 创建已存在子目录结果
4. rmdir 命令
⑴ rmdir语法:rmdir[选项|参数] 目录名
⑵ rmdir命令说明:用语删除空的目录。
⑶ 使用权限:所有用户。
⑷ rmdir命令参数选项:
4Linux操作系统实训报告
-p:当子目录被删除后使它也成为空目录的话,则顺便一并删除。
⑸ 范例:
例1:删除上例中使用mkdir创建的“2007435124”和“温周洋”子目录,并使用ls
命令观察结果,如图1-7所示。
图1-7使用rmdir删除子目录
例2:使用rmdir 删除一个不存在的目录,并观察结果,如图1-8所示。
图1-8使用rmdir命令删除不存在目录结果
5. cd 命令
⑴ cd 语法:cd 目录名
⑵ 命令说明:用语更改当前目录。
⑶ 使用权限:所有用户。
⑷ 范例:
例1:使用cd 命令进入“07124”目录(已存在)和“07142”目录(不存在),并观察结果,如图1-9所示。
图1-9 更改当前目录
5Linux操作系统实训报告
6. pwd 命令
⑴ pwd 语法:pwd
⑵ 命令说明:显示当前用户所在工作组目录位置。
⑶ 使用权限:所有用户。
⑷ 范例:
例1:显示当前用户所在工作组目录,如图1-10所示。
图1-10 显示当前目录
7. cp 命令
⑴ cp 语法:cp[选项|源文件或目录][目标文件或目录][目的目录]
⑵ 命令说明:复制文件或目录。
⑶ 使用权限:所有用户。
⑷ cp命令参数表,见表1-2。
表1-2 cp命令参数
参数选项
-a
-b
-d
说 明
此参数的效果和同时指定“-dpR”参数相同
删除覆盖目标文件之前备份,备份文件会在字尾加上一个备份字符串
当复制符号链接时,把目标文件或目录也建立符号链接,并指向与源文件或目录链接的原始文件或目录
-f
-i
-l
-p
-P
-r
-R
-s
-u
强行复制文件或目录不论目标文件或目录是否存在
覆盖既有文件之前先询问用户
对源文件建立硬链接,而非复制文件
保留源文件或目录的属性
保留源文件或目录的路径
递归处理,将指定目录下的文件与子目录一并处理
递归处理,将指定目录下的所有文件与子目录一并处理
对文件建立符号链接,而非复制文件
使用这项参数后只会在源文件的更改时间较目标文件更新时或与名称对应的目标文件并不存在,才复制文件
-v 显示命令执行过程
6Linux操作系统实训报告-x 复制文件或目录存放的文件系统,必须与cp命令执行时所处文件系统相同,否则不复制
⑸ 范例:
例1:复制/root/2007435124/下的所有以24开头的文件到/home/温周洋 目录下,如图1-11所示。
图1-11 复制所有以24开头的对象
8. rm 命令
⑴ rm 语法:rm[选项][文件或目录...]
⑵ rm 命令说明:删除文件或目录。
⑶ 使用权限:所有用户。
⑷ rm 命令参数表,见表1-3。
表1-3 rm命令参数
参数选项
-d
-f
-i
-r/-R
-v
说 明
直接把欲删除的目录的硬链接数据删成0,删除该目录
强制删除文件或目录,删除文件或目录前不在询问用户
删除既有文件或目录之前先询问用户,此为默认项
递归处理,将指定目录下的所有文件及子目录一并处理
显示命令执行过程
⑸ 范例:
例1:直接删除/root/2007435124/24.c文件,删除前不询问用户,如图1-12所示。
7Linux操作系统实训报告
图1-12删除文件
例2:删除/root/2007435124下的文件和24子目录,删除前询问用户,如图1-13所示。
图1-13 删除特定文件和目录
9. mv 命令
⑴ mv语法:mv [文件1或目录1][文件2或目录2]
⑵ mv命令说明:移动文件或修改文件名。
⑶ 使用权限:所有用户。
⑷ 范例:
例1:修改/root/2007435124目录下的文件为,如图1-14所示。
图1-14 修改文件名
例2:移动/root/2007435124目录下的文件到/root/下,如图1-15所示。
图1-15移动文件
8Linux操作系统实训报告10. cat 命令
⑴ cat 命令语法:cat[选项] 文件名
⑵ cat 命令说明:用于显示特定文件到标准输出设备或另一个文件中。
⑶ 使用权限:所有用户。
⑷ cat 命令参数表,见表1-4。
表1-4 cat命令参数
参数选项
-n
-b
-s
由1开始对所有输出的行数编号
和-n相似,只不过对于空格行不编号
当遇上连续两行以上空白行时就换成一行空白行
说 明
⑸ 范例:
例1:显示文件中的内容,如图1-16所示。
图1-16显示文件内容
11.
more 命令
⑴ more 命令语法:more 文件名
⑵ more 命令说明:用于分页显示指定文件的内容。
⑶ 使用权限:所有用户。
⑷ 范例:
例1:逐页显示/etc/samba/的内容,要求一次显示10行,如图1-17所示。
9Linux操作系统实训报告
图1-17 逐页显示文件内容
12. clear和date命令
⑴ clear命令说明:用于清屏。
⑵ date命令说明:显示系统当前时间。
⑶ 范例:
例1:显示当前系统时间,如图1-18所示。
图1-18 显示系统时间
10Linux操作系统实训报告第二章 Vi编辑器
2.1 Vi编辑器简介
2.1.1 Vi编辑器概述
在各种操作系统中,编辑各种文件是必不可少的工作部分。在Linux操作系统中提供了一系列的编辑器供用户使用,例如Vi、Vim、Emacs、pico、ex、ed等,其中Vim(Vi的增强版)是最常用的编辑器,它是唯一在所有版本的Linux系统和其他各种UNIX系统中都配备的文本编辑器。
4.1.2 Vi 编辑器的工作模式
Vi编辑器有3种工作模式,在每种工作模式下能做不同的操作。
⑴ 命令模式:是进入Vi的默认模式,在此模式下可以对所编辑文档进行复制、粘贴、删除、移动光标、继续查找等操作,同时它也是末行模式和编辑模式之间进行切换的中转站。
⑵ 末行模式:用于文件的保存、退出、定位光标、查找、替换、设置行标等操作。
⑶ 编辑模式:用于直接编辑文件。
⑷ 三种模式之间的切换方法如图2-1所示。
从图2-1中可以看到,编辑模式和末行模式之间不能直接切换,必须通过命令模式进行过度。
图2-1 工作模式切换模式图
11Linux操作系统实训报告2.2 Vi 编辑器操作
2.2.1 Vi编辑器的启动
可以使用简单的命令来启动Vim文本编辑器,通常可直接指定需要编辑的文件路径,即使需要编辑的是一个原本不存在的新文件。一般命令如下所示:
[Root@linux root]# vim 文件名
2.2.2 三种模式的操作
进入Vi后,首先会看到如图2-2所示的界面:
图2-2 Vi主界面(命令模式)
图2-2所示的界面即为命令模式的界面,在这个界面下按下“:”键就可以进入如图2-3所示的末行模式,所谓“末行模式”就是在编辑器的最后一行进行输入。
末行命令 wq 表示将编辑内容写入文件并退出。这里不退出而进入编辑模式,因为末行模式不能直接进入编辑模式,因此先按下“Esc”键退回命令模式,在命令模式下按“insert”进入如图2-4所示的编辑模式,在编辑模式下可以输入文本。
12Linux操作系统实训报告
图2-3 末行模式
图2-4 编辑模式
2.2.3 命令
1. 末行模式命令
在末行模式下可以输入末行命令,常用的末行命令见表2-1。
13Linux操作系统实训报告
:w path/filename
:n,m w path/filename
:q!
:q
:wq 或 :x
r path/filename
set nu
set nonu
/char
? char
保存文件
保存指定范围文档(n表示开始行,m表示结束行)
对文件修改后,不保存强制退出。
没有对文件做过修改,退出
保存退出
读取文件
打开行标
关闭行标
正向查找字符
反向查找字符
表2-1 末行模式命令
2. 命令模式命令
在命令模式下,也可以使用大量的命令对文件进行编辑等操作,常用的命令模式命令见表2-2。
表4-2 命令模式命令
a
A
i
I
o
O
x
dd
r
R
s
S
从光标所在位置后面新增文字,光标后的文字随新增文字向后移动
从光标所在列最后面的地方开始新增文字
从光标所在位置前面开始插入文字,光标后的文字随新增文字移动<可用insert键>
从光标所在列的第一个非空白字符前面开始插入文字
在光标所在列下新增一列并进入输入模式
在光标所在列上方新增一列并进入输入模式
删除光标所在字符<也可以用Delete键>
删除光标所在行
修改光标所在字符,r后接要修改的字符
进入替换状态,新增文字会覆盖原先文字知道按ESC后到命令模式
删除光标所在字元,并进入输入模式
删除光标所在的列,并进入输入模式
14Linux操作系统实训报告第三章Linux下C语言编程
3.1 gcc简介
1. gcc基本语法
gcc [option][filename]
表3-1 gcc参数列表
选项
-c
-o<文件名>
-S
-E
-O
-O2
-g
功能
对源文件进行预处理、编译和汇编,产生目标文件,但不进行连接。
定义输出的执行文件名为<文件名>
在编译后停止,产生类型名为s的汇编代码文件
在预处理后停止,输出预处理后的源代码至标准输出,不进行编译
对程序进行编译优化,编译速度比不做优化慢且要求内存多。
比-O优化效果更好,但编译速度较慢
产生一张用于调试和排错的扩展符号表,以便用gdb进行调试
3.2 Linux下C语言编程
1. 编写程序实现如下图形显示
*
* *
* * *
* * * * *
* * * * * *
程序实现代码如下,运行结果如图3-1所示。
#include
main()
{ int i,j,k;
for(i=0;i<5;i++)
{
for(k=0;k<4-i;k++)
printf(" ");
for(j=0;j<=i;j++)
printf("* ");
printf("n");
}}
15Linux操作系统实训报告
图3-1 金字塔图形
2. 编写程序实现求三个数中最大值
程序实现代码如下,运行结果如图3-2所示。
#include
int max(int x,int y,int z)
{
int max;
max=x;
if(max if(max return max; } main() { int i,j,k,l; printf("please input three numbers:n"); scanf("%d %d %d",&i,&j,&k); l=max(i,j,k); printf("The max number is:%dn", l); } 图3-2求三个数中最大值 16Linux操作系统实训报告3. 编写程序实现求一维数组中最大值 程序实现代码如下所示,运行结果如图3-3所示。 #include #include #include main() { int array[10]; int i,max; time_t t; srand((unsigned)time(&t)); for(i=0;i<10;i++) { array[i]=rand()%100; } printf("The array are:n"); for(i=0;i<10;i++) { printf("%2d ",array[i]); if((i+1)%5==0) printf("n"); } max=array[0]; for(i=0;i<10;i++) { if(max } printf("The max number is:%dn",max); } max=array[i]; 图3-3求一维数组中最大值 17Linux操作系统实训报告3.3 gdb调试 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。其基本命令见表3-2。 表3-2 GDB命令 命令 file <文件名> 加载被调试的可执行程序文件。 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 r Run的简写,运行被调试的程序。 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 c b <行号> b <函数名称> b *<函数名称> b *<代码地址> d [编号] Continue的简写,继续执行被调试程序,直至下一个断点或程序结束 b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 s, n s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; n 相当于其它调试器中的“Step Over (单步跟踪)”。这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 si, ni si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 p <变量名称> display ... undisplay <编号> Print的简写,显示指定变量(临时变量或全局变量)的值 display,设置程序中断后欲显示的数据及其格式。 例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 “display /i $pc” 其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 i Info的简写,用于显示各类信息,详情请查阅“help i”。 18说明 Linux操作系统实训报告q Quit的简写,退出GDB调试环境。 Linux下使用gdb进行程序调试(以一个C语言程序为例)。首先使用gcc进行编译如下: [Root@linux root]# gcc tt.c -o tt -g 然后进入gdb,会看到说明,接着加载已经编译过的C文件,加载成功后使用r命令运行结果如图3-4所示。 图3-4 gdb调试程序 使用gdb进行调试可以进行断点设置,在第21行设置一个断点(b命令),然后使用r命令进行运行,当程序运行至断点时程序停止,继续运行可以使用c命令,运行过程如图3-5所示。 19Linux操作系统实训报告图3-5断点设置 第四章 进程控制和通信 4.1 进程控制 利用signal和kill实现软中断通信 kill( ) 系统调用格式:int kill(pid,sig) 参数定义:int pid,sig; 其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号。 (1)pid>0时,核心将信号发送给进程pid。 (2)pid=0时,核心将信号发送给与发送进程同组的所有进程。 (3)pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。 signal( ) 预置对信号的处理方式,允许调用进程控制软中断信号。 singal函数的原型void (*signal(int signo,void(*func)(int)))(int) 这是Linux中的signal interface function,返回值类型:void(*) 系统调用格式:signal(sig,function) 头文件为:#include 参数定义: signal(sig,function) int sig; void (*func) ( ) 其中sig用于指定信号的类型,sig为0则表示没有收到任何信号.function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。 function 的解释如下: (1)function=1时,进程对sig类信号不予理睬,亦即屏蔽了该类信号; (2)function=0时,缺省值,进程在收到sig信号后应终止自己; (3)function为非0,非1类整数时,function的值即作为信号处理程序的指针。 4.2 Linux下进程控制实现 程序代码: 20Linux操作系统实训报告 #include #include #include int waite; void start() {waite=0;}//自定义中断调用函数 static void waiting() {while(waite==1);} main(){ int pid1,pid2; if(pid1>0){ } else{ } waite=1; signal(16,start);//接受父进程发送的16号中断,调用信号中断函数start() waiting(); printf("child 1 is killedn"); exit(0);} printf("chilld process 1 is %dn",pid1); while((pid2=fork())==-1); if(pid2>0){ printf("child process 2 is %dn",pid2); printf("please press 'delete'n"); waite=1; if(signal(SIGUSR1,start)==SIG_ERR); else{alarm(5); signal(SIGALRM,start);//alarm函数使用的信号} waiting(); kill(pid1,16);//向child 1 子进程发送16号中断 kill(pid2,17);//向child 2 子进程发送17号中断 wait(0);//等待两个子进程结束 wait(0); printf("parent process is killedn"); exit(0);} else{waite=1; signal(17,start);//接受父进程发送的17号中断,调用信号中断函数start() waiting(); printf("child 2 is killedn"); exit(0);} 运行结果如图4-1所示。 21Linux操作系统实训报告 图4-1进程控制 4.3 进程通信 在计算机系统中,并发进程之间经常要交换一些信息。在并发进程间用PV操作交换信息实现进程的同步和互斥,以保障安全地共享资源和协调地完成任务。因此,把PV操作可看作是进程间的一种通信,但这种方式只交换少量的信息,例如缓冲区中是否已有物品和是否可以读文件等,可以把这种通信方式称为低级通信方式。有时进程间要交换大量的信息,这种大量信息的传递要有专门通信机制来实现,这是一种更高级的通信方式,成为“进程通信”。 进程通信的方法很多,管道法是其中的一种。所谓管道法,是指利用一个共享文件作为进程通信的管道,通过读写进程以生产、消费者方式对其进行操作。 4.4 Linux下管道通信实现 程序代码: 服务器端代码: #include #include #include #include #include #define filename “myfifo” int main(void) { FILE *fp; char readbuf[80]; umask(0); mknod(filename,S_IFIFO|0666,0); while(1) { fp=fopen(filename,”r”); 22Linux操作系统实训报告 fgets(readbuf,80,fp); printf(“收到的数据:%s﹨n”,readbuf); fclose(fp);} return(0); } 客户端代码: #include #include #define filename “myfifo” int main(int argc,char *argv[]) { FILE *fp; if(argc !=2) { printf(“Use: fileclient [string]﹨n”); exit(1); } { perror(“fopen”); exit(1); } fputs(argv[1],fp); fclose(fp); return(0); } if((fp=fopen(filename,”w”))==NULL) 运行结果如图4-2 、4-3所示。 图4-2 客户端 图4-3 服务器端 23Linux操作系统实训报告结 论 经过了一个星期的学习和实践,在老师和同学们的指导帮助下,我顺利完成了这次的Linux操作系统实训。 Linux操作系统是一个对我们来说很陌生的操作系统,从开始的查阅资料一直到第一次的上机操作,我都还停留在Windows的完全图形化界面中,完全不适应Linux的多命令操作(Linux也有图形操作),但是在其后的课程中跟随老师发给我们任务书的不断练习,我的思想也渐渐的转变了,开始适应这种快速的命令行操作。由于以前曾经接触过一些有关Linux的命令,因此我学习起来上手的也比较快,在短短的几次上机练习后就完全熟练了这种操作。 Linux下的编程也是比较实用的,可是当我们这些在Windows 下用惯了各种编译软件,转型到Linux下的时候,完全有点不知所措了,更在于这次有设计到很多关于修改Linux内核的编程,对我们这些初出茅庐的新手来说简直不知道该怎么办了,还好在老师的帮助下,我们免去了程序的编写,只需要在Linux上将程序调试、运行,即使这样,也是困难重重。在不断的尝试和摸索中,同时在老师的帮助下,我的C程序竟也全部运行出结果了。 Linux操作系统实训,仿佛让我们走进了另一个世界。接触了一种全新的事物,走出Windows走进Linux,我们感受到了不同操作系统直间的差别和优缺点使我们学到了更多课本上所不知道的知识。 在实训的最后,再次感谢老师们,老师渊源的学识、严谨求实的科学精神、一丝不苟的治学态度和高尚的品格,深深地感染了我们每一位同学,不仅使我们开阔了视野,拓宽了思路,增长了知识,而且为我们今后的工作和学习打下了牢固的基础,也增强了我们对计算机的兴趣。在大学中一起学的朋友,对我们有深远影响的老师们,将是我们在以后的工作和学习中的宝贵财富。 24 2023年8月2日发(作者:) 目 录 第一章Linux命令 ..............................................................................................................................1 1.1 Linux操作系统简介 ..............................................................................................................1 1.2 虚拟机操作流程 ....................................................................................................................2 1.3 Linux文件与目录的基本操作 ..............................................................................................2 第二章 Vi编辑器 .............................................................................................................................12 2.1 Vi编辑器简介 ......................................................................................................................12 2.2 Vi 编辑器操作 .....................................................................................................................13 第三章Linux下C语言编程 ............................................................................................................16 3.1 gcc简介 ................................................................................................................................16 3.2 Linux下C语言编程 ............................................................................................................16 3.3 gdb调试 ................................................................................................................................19 第四章 进程控制和通信 ..................................................................................................................21 4.1 进程控制 ..............................................................................................................................21 4.2 Linux下进程控制实现 ........................................................................................................21 4.3 进程通信 ..............................................................................................................................23 4.4 Linux下管道通信实现 ........................................................................................................23 结 论 ................................................................................................................................................25 Linux操作系统实训报告 1.1 Linux操作系统简介 第一章Linux命令 Linux的起源: UNIX系统的快速发展,引起了计算机科学家Andrew Tanenbaum的强烈好感,为了方便学生更好的了解操作系统的工作原理,他开发了一个迷你的UNIX,即Minix系统。1991年10月,芬兰赫尔辛基的学生Linuxs Torvalds在Minix的基础上开发了大约一万行的代码,将其发布到论坛上供大家下载,后来在众多黑客的开发下,终于在1994年3月14日发布了Linux1.0版本。此后Linux各种版本开始流行起来。1999年发布了Linux中文版本。 严格的说,Linux不算是一个操作系统,只是一个操作系统的内核,即计算机软件与硬件之间通信的平台;Linux的全称是GNU/Linux,这才算是一个真正意义上的Linux系统。GNU是Richard Stallman 组织的一个项目,世界各地的程序员可以编写GNU程序,同时遵循GPL协议,允许任何人随意更改。不过,修改后的程序也要遵守GPL协议。 Linux的特点: ● 完全免费。由于Linux遵循通用的公共许可证GPL,因此任何人有使用、拷贝和修改Linux的自由。 ● 高效安全稳定。UNIX操作系统的稳定性是众所周知的,Linux继承了UNIX核心的设计思想,具有执行效率高、安全和稳定性好的特点。 ● 支持多种硬件平台。Linux能在笔记本电脑、PC机、工作站、甚至大型机上运行,并能在x86、MIPS、PowerPC、SPARC、和Alpha等主流的体系结构上运行。 ● 友好的用户界面。Linux提供了类似Windows图形界面的X-Windows系统,用户可以使用鼠标方便、直观、快捷的进行操作。 ● 强大的网络功能。网络是Linux的生命,完善的网络支持是Linux与生俱来的能力,所有Linux在通信和网络功能方面优于其他操作系统。 ● 支持多任务、多用户。Linux是多任务、多用户的操作系统,可以支持多个使用者同时使用并共享系统的磁盘、外设和处理器等系统资源。Linux的保护机制使每个应用程序和用户互不干扰,任何一个任务不崩溃,其他任务仍然正常运行。 0Linux操作系统实训报告1.2 虚拟机操作流程 Vmware Workstation6 是目前比较主流的虚拟机软件,也是唯一的能在Windows和Linux主机平台上运行的虚拟计算机软件。它能真实的模拟物理计算机的所有基本功能,是多平台学习不可或缺的虚拟软件。 首先,打开Vmware Workstation6虚拟机软件,在主界面中选择Red Had Enterprise Linux4虚拟计算机系统,点击Commands框架中的“Start this Virtual machine”按钮,运行Red Had Enterprise Linux4虚拟系统。 1.3 Linux文件与目录的基本操作 1.3.1 文件与文件名 Linux的文件名长度可以达到256个字符,但不能使用以下字符做文件名: !@#$%^&*()[]{}’”;<>空格 Linux区分大小写ABCAbc不同 文件名中如果有多个小数点,最右边的一个为分隔符,表示文件的类型,如.txt,.c 1.3.2 目录 “/”为根目录、目录分隔符和目录与文件的分隔符。如:/home/feng/。 1.3.3 文件与目录的常用命令 1. man 命令 ⑴ man语法:man 命令符 ⑵ man 命令说明:对你熟悉或不熟悉的命令提供帮助解释(按空格键显示下一页,按b键返回,按q键退出)。 ⑶ 使用权限:所有用户。 ⑷ 范例: 例1:显示vi命令的帮助解释,如图1-1所示。 [Root@linux root]# man vi 1Linux操作系统实训报告 图1-1man命令查看vi帮助 2. ls 命令 ⑴ ls语法:ls[选项|参数]目录名 ⑵ ls命令说明:用于显示指定目录或文件的相关信息。 ⑶ 使用权限:所有用户。 ⑷ ls命令参数选项见表1-1。 表1-1 ls命令参数选项 选项选项 -a -l 功能 显示所有文件和目录,包括隐含文件 显示文件的完整信息 -F d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件(link) 表示文件或者目录许可权限,分别用可读(r),可写(w),可运行(x)。 在每个文件名的后面或是前面添加一个特定的后缀字符的方法指出它的类型 /:子目录 *:可执行文件 无:普通文件 .开头:隐含文件 -r -t -A -R 将文件以反次序显示(依英文字母顺序) 将文件依建立时间的先后顺序列出,后建的排在前面 同-a,但不列出“.”当前目录和“..”父目录 若目录下有文件,则列出其下文件 ⑸ 范例: 2Linux操作系统实训报告 例1:显示目录或文件的详细列表并以创建时间的先后反次序显示,如图1-2所示。 图1-2 显示列表 例2:显示目录(子目录不为空时显示子目录)详细列表,如图1-3所示。 图1-3 显示详细列表(R参数) 例3:显示所有文件和目录,包括隐含文件但不列出“.”当前目录和“..”父目录,在每个文件名的后面或是前面添加一个特定的后缀字符的方法指出它的类型,如图1-4所示。 图1-4 AF参数结果 3. mkdir 命令 3Linux操作系统实训报告 ⑴ mkdir语法:mkdir[选项|参数]目录名 ⑵ mkdir命令说明:用于创建目录。 ⑶ 使用权限:所有用户。 ⑷ mkdir命令参数选项: -p:确保目录名称存在,不存在的话就创建一个。 -m:在创建目录时设置目录权限。 ⑸ 范例: 例1:使用自己的学号和姓名各创建一个子目录,并用ls 命令观察结果,如图1-5所示。 图1-5 使用mkdir命令创建子目录 例2:创建一个已经存在的子目录,观察显示结果,如图1-6所示。 图1-6 创建已存在子目录结果 4. rmdir 命令 ⑴ rmdir语法:rmdir[选项|参数] 目录名 ⑵ rmdir命令说明:用语删除空的目录。 ⑶ 使用权限:所有用户。 ⑷ rmdir命令参数选项: 4Linux操作系统实训报告 -p:当子目录被删除后使它也成为空目录的话,则顺便一并删除。 ⑸ 范例: 例1:删除上例中使用mkdir创建的“2007435124”和“温周洋”子目录,并使用ls 命令观察结果,如图1-7所示。 图1-7使用rmdir删除子目录 例2:使用rmdir 删除一个不存在的目录,并观察结果,如图1-8所示。 图1-8使用rmdir命令删除不存在目录结果 5. cd 命令 ⑴ cd 语法:cd 目录名 ⑵ 命令说明:用语更改当前目录。 ⑶ 使用权限:所有用户。 ⑷ 范例: 例1:使用cd 命令进入“07124”目录(已存在)和“07142”目录(不存在),并观察结果,如图1-9所示。 图1-9 更改当前目录 5Linux操作系统实训报告 6. pwd 命令 ⑴ pwd 语法:pwd ⑵ 命令说明:显示当前用户所在工作组目录位置。 ⑶ 使用权限:所有用户。 ⑷ 范例: 例1:显示当前用户所在工作组目录,如图1-10所示。 图1-10 显示当前目录 7. cp 命令 ⑴ cp 语法:cp[选项|源文件或目录][目标文件或目录][目的目录] ⑵ 命令说明:复制文件或目录。 ⑶ 使用权限:所有用户。 ⑷ cp命令参数表,见表1-2。 表1-2 cp命令参数 参数选项 -a -b -d 说 明 此参数的效果和同时指定“-dpR”参数相同 删除覆盖目标文件之前备份,备份文件会在字尾加上一个备份字符串 当复制符号链接时,把目标文件或目录也建立符号链接,并指向与源文件或目录链接的原始文件或目录 -f -i -l -p -P -r -R -s -u 强行复制文件或目录不论目标文件或目录是否存在 覆盖既有文件之前先询问用户 对源文件建立硬链接,而非复制文件 保留源文件或目录的属性 保留源文件或目录的路径 递归处理,将指定目录下的文件与子目录一并处理 递归处理,将指定目录下的所有文件与子目录一并处理 对文件建立符号链接,而非复制文件 使用这项参数后只会在源文件的更改时间较目标文件更新时或与名称对应的目标文件并不存在,才复制文件 -v 显示命令执行过程 6Linux操作系统实训报告-x 复制文件或目录存放的文件系统,必须与cp命令执行时所处文件系统相同,否则不复制 ⑸ 范例: 例1:复制/root/2007435124/下的所有以24开头的文件到/home/温周洋 目录下,如图1-11所示。 图1-11 复制所有以24开头的对象 8. rm 命令 ⑴ rm 语法:rm[选项][文件或目录...] ⑵ rm 命令说明:删除文件或目录。 ⑶ 使用权限:所有用户。 ⑷ rm 命令参数表,见表1-3。 表1-3 rm命令参数 参数选项 -d -f -i -r/-R -v 说 明 直接把欲删除的目录的硬链接数据删成0,删除该目录 强制删除文件或目录,删除文件或目录前不在询问用户 删除既有文件或目录之前先询问用户,此为默认项 递归处理,将指定目录下的所有文件及子目录一并处理 显示命令执行过程 ⑸ 范例: 例1:直接删除/root/2007435124/24.c文件,删除前不询问用户,如图1-12所示。 7Linux操作系统实训报告 图1-12删除文件 例2:删除/root/2007435124下的文件和24子目录,删除前询问用户,如图1-13所示。 图1-13 删除特定文件和目录 9. mv 命令 ⑴ mv语法:mv [文件1或目录1][文件2或目录2] ⑵ mv命令说明:移动文件或修改文件名。 ⑶ 使用权限:所有用户。 ⑷ 范例: 例1:修改/root/2007435124目录下的文件为,如图1-14所示。 图1-14 修改文件名 例2:移动/root/2007435124目录下的文件到/root/下,如图1-15所示。 图1-15移动文件 8Linux操作系统实训报告10. cat 命令 ⑴ cat 命令语法:cat[选项] 文件名 ⑵ cat 命令说明:用于显示特定文件到标准输出设备或另一个文件中。 ⑶ 使用权限:所有用户。 ⑷ cat 命令参数表,见表1-4。 表1-4 cat命令参数 参数选项 -n -b -s 由1开始对所有输出的行数编号 和-n相似,只不过对于空格行不编号 当遇上连续两行以上空白行时就换成一行空白行 说 明 ⑸ 范例: 例1:显示文件中的内容,如图1-16所示。 图1-16显示文件内容 11. more 命令 ⑴ more 命令语法:more 文件名 ⑵ more 命令说明:用于分页显示指定文件的内容。 ⑶ 使用权限:所有用户。 ⑷ 范例: 例1:逐页显示/etc/samba/的内容,要求一次显示10行,如图1-17所示。 9Linux操作系统实训报告 图1-17 逐页显示文件内容 12. clear和date命令 ⑴ clear命令说明:用于清屏。 ⑵ date命令说明:显示系统当前时间。 ⑶ 范例: 例1:显示当前系统时间,如图1-18所示。 图1-18 显示系统时间 10Linux操作系统实训报告第二章 Vi编辑器 2.1 Vi编辑器简介 2.1.1 Vi编辑器概述 在各种操作系统中,编辑各种文件是必不可少的工作部分。在Linux操作系统中提供了一系列的编辑器供用户使用,例如Vi、Vim、Emacs、pico、ex、ed等,其中Vim(Vi的增强版)是最常用的编辑器,它是唯一在所有版本的Linux系统和其他各种UNIX系统中都配备的文本编辑器。 4.1.2 Vi 编辑器的工作模式 Vi编辑器有3种工作模式,在每种工作模式下能做不同的操作。 ⑴ 命令模式:是进入Vi的默认模式,在此模式下可以对所编辑文档进行复制、粘贴、删除、移动光标、继续查找等操作,同时它也是末行模式和编辑模式之间进行切换的中转站。 ⑵ 末行模式:用于文件的保存、退出、定位光标、查找、替换、设置行标等操作。 ⑶ 编辑模式:用于直接编辑文件。 ⑷ 三种模式之间的切换方法如图2-1所示。 从图2-1中可以看到,编辑模式和末行模式之间不能直接切换,必须通过命令模式进行过度。 图2-1 工作模式切换模式图 11Linux操作系统实训报告2.2 Vi 编辑器操作 2.2.1 Vi编辑器的启动 可以使用简单的命令来启动Vim文本编辑器,通常可直接指定需要编辑的文件路径,即使需要编辑的是一个原本不存在的新文件。一般命令如下所示: [Root@linux root]# vim 文件名 2.2.2 三种模式的操作 进入Vi后,首先会看到如图2-2所示的界面: 图2-2 Vi主界面(命令模式) 图2-2所示的界面即为命令模式的界面,在这个界面下按下“:”键就可以进入如图2-3所示的末行模式,所谓“末行模式”就是在编辑器的最后一行进行输入。 末行命令 wq 表示将编辑内容写入文件并退出。这里不退出而进入编辑模式,因为末行模式不能直接进入编辑模式,因此先按下“Esc”键退回命令模式,在命令模式下按“insert”进入如图2-4所示的编辑模式,在编辑模式下可以输入文本。 12Linux操作系统实训报告 图2-3 末行模式 图2-4 编辑模式 2.2.3 命令 1. 末行模式命令 在末行模式下可以输入末行命令,常用的末行命令见表2-1。 13Linux操作系统实训报告 :w path/filename :n,m w path/filename :q! :q :wq 或 :x r path/filename set nu set nonu /char ? char 保存文件 保存指定范围文档(n表示开始行,m表示结束行) 对文件修改后,不保存强制退出。 没有对文件做过修改,退出 保存退出 读取文件 打开行标 关闭行标 正向查找字符 反向查找字符 表2-1 末行模式命令 2. 命令模式命令 在命令模式下,也可以使用大量的命令对文件进行编辑等操作,常用的命令模式命令见表2-2。 表4-2 命令模式命令 a A i I o O x dd r R s S 从光标所在位置后面新增文字,光标后的文字随新增文字向后移动 从光标所在列最后面的地方开始新增文字 从光标所在位置前面开始插入文字,光标后的文字随新增文字移动<可用insert键> 从光标所在列的第一个非空白字符前面开始插入文字 在光标所在列下新增一列并进入输入模式 在光标所在列上方新增一列并进入输入模式 删除光标所在字符<也可以用Delete键> 删除光标所在行 修改光标所在字符,r后接要修改的字符 进入替换状态,新增文字会覆盖原先文字知道按ESC后到命令模式 删除光标所在字元,并进入输入模式 删除光标所在的列,并进入输入模式 14Linux操作系统实训报告第三章Linux下C语言编程 3.1 gcc简介 1. gcc基本语法 gcc [option][filename] 表3-1 gcc参数列表 选项 -c -o<文件名> -S -E -O -O2 -g 功能 对源文件进行预处理、编译和汇编,产生目标文件,但不进行连接。 定义输出的执行文件名为<文件名> 在编译后停止,产生类型名为s的汇编代码文件 在预处理后停止,输出预处理后的源代码至标准输出,不进行编译 对程序进行编译优化,编译速度比不做优化慢且要求内存多。 比-O优化效果更好,但编译速度较慢 产生一张用于调试和排错的扩展符号表,以便用gdb进行调试 3.2 Linux下C语言编程 1. 编写程序实现如下图形显示 * * * * * * * * * * * * * * * * * 程序实现代码如下,运行结果如图3-1所示。 #include main() { int i,j,k; for(i=0;i<5;i++) { for(k=0;k<4-i;k++) printf(" "); for(j=0;j<=i;j++) printf("* "); printf("n"); }} 15Linux操作系统实训报告 图3-1 金字塔图形 2. 编写程序实现求三个数中最大值 程序实现代码如下,运行结果如图3-2所示。 #include int max(int x,int y,int z) { int max; max=x; if(max if(max return max; } main() { int i,j,k,l; printf("please input three numbers:n"); scanf("%d %d %d",&i,&j,&k); l=max(i,j,k); printf("The max number is:%dn", l); } 图3-2求三个数中最大值 16Linux操作系统实训报告3. 编写程序实现求一维数组中最大值 程序实现代码如下所示,运行结果如图3-3所示。 #include #include #include main() { int array[10]; int i,max; time_t t; srand((unsigned)time(&t)); for(i=0;i<10;i++) { array[i]=rand()%100; } printf("The array are:n"); for(i=0;i<10;i++) { printf("%2d ",array[i]); if((i+1)%5==0) printf("n"); } max=array[0]; for(i=0;i<10;i++) { if(max } printf("The max number is:%dn",max); } max=array[i]; 图3-3求一维数组中最大值 17Linux操作系统实训报告3.3 gdb调试 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。其基本命令见表3-2。 表3-2 GDB命令 命令 file <文件名> 加载被调试的可执行程序文件。 因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 r Run的简写,运行被调试的程序。 如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 c b <行号> b <函数名称> b *<函数名称> b *<代码地址> d [编号] Continue的简写,继续执行被调试程序,直至下一个断点或程序结束 b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。 其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。 d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。 s, n s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数; n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”; n 相当于其它调试器中的“Step Over (单步跟踪)”。这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。 si, ni si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。 p <变量名称> display ... undisplay <编号> Print的简写,显示指定变量(临时变量或全局变量)的值 display,设置程序中断后欲显示的数据及其格式。 例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令 “display /i $pc” 其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。 i Info的简写,用于显示各类信息,详情请查阅“help i”。 18说明 Linux操作系统实训报告q Quit的简写,退出GDB调试环境。 Linux下使用gdb进行程序调试(以一个C语言程序为例)。首先使用gcc进行编译如下: [Root@linux root]# gcc tt.c -o tt -g 然后进入gdb,会看到说明,接着加载已经编译过的C文件,加载成功后使用r命令运行结果如图3-4所示。 图3-4 gdb调试程序 使用gdb进行调试可以进行断点设置,在第21行设置一个断点(b命令),然后使用r命令进行运行,当程序运行至断点时程序停止,继续运行可以使用c命令,运行过程如图3-5所示。 19Linux操作系统实训报告图3-5断点设置 第四章 进程控制和通信 4.1 进程控制 利用signal和kill实现软中断通信 kill( ) 系统调用格式:int kill(pid,sig) 参数定义:int pid,sig; 其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号。 (1)pid>0时,核心将信号发送给进程pid。 (2)pid=0时,核心将信号发送给与发送进程同组的所有进程。 (3)pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。 signal( ) 预置对信号的处理方式,允许调用进程控制软中断信号。 singal函数的原型void (*signal(int signo,void(*func)(int)))(int) 这是Linux中的signal interface function,返回值类型:void(*) 系统调用格式:signal(sig,function) 头文件为:#include 参数定义: signal(sig,function) int sig; void (*func) ( ) 其中sig用于指定信号的类型,sig为0则表示没有收到任何信号.function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGKILL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。 function 的解释如下: (1)function=1时,进程对sig类信号不予理睬,亦即屏蔽了该类信号; (2)function=0时,缺省值,进程在收到sig信号后应终止自己; (3)function为非0,非1类整数时,function的值即作为信号处理程序的指针。 4.2 Linux下进程控制实现 程序代码: 20Linux操作系统实训报告 #include #include #include int waite; void start() {waite=0;}//自定义中断调用函数 static void waiting() {while(waite==1);} main(){ int pid1,pid2; if(pid1>0){ } else{ } waite=1; signal(16,start);//接受父进程发送的16号中断,调用信号中断函数start() waiting(); printf("child 1 is killedn"); exit(0);} printf("chilld process 1 is %dn",pid1); while((pid2=fork())==-1); if(pid2>0){ printf("child process 2 is %dn",pid2); printf("please press 'delete'n"); waite=1; if(signal(SIGUSR1,start)==SIG_ERR); else{alarm(5); signal(SIGALRM,start);//alarm函数使用的信号} waiting(); kill(pid1,16);//向child 1 子进程发送16号中断 kill(pid2,17);//向child 2 子进程发送17号中断 wait(0);//等待两个子进程结束 wait(0); printf("parent process is killedn"); exit(0);} else{waite=1; signal(17,start);//接受父进程发送的17号中断,调用信号中断函数start() waiting(); printf("child 2 is killedn"); exit(0);} 运行结果如图4-1所示。 21Linux操作系统实训报告 图4-1进程控制 4.3 进程通信 在计算机系统中,并发进程之间经常要交换一些信息。在并发进程间用PV操作交换信息实现进程的同步和互斥,以保障安全地共享资源和协调地完成任务。因此,把PV操作可看作是进程间的一种通信,但这种方式只交换少量的信息,例如缓冲区中是否已有物品和是否可以读文件等,可以把这种通信方式称为低级通信方式。有时进程间要交换大量的信息,这种大量信息的传递要有专门通信机制来实现,这是一种更高级的通信方式,成为“进程通信”。 进程通信的方法很多,管道法是其中的一种。所谓管道法,是指利用一个共享文件作为进程通信的管道,通过读写进程以生产、消费者方式对其进行操作。 4.4 Linux下管道通信实现 程序代码: 服务器端代码: #include #include #include #include #include #define filename “myfifo” int main(void) { FILE *fp; char readbuf[80]; umask(0); mknod(filename,S_IFIFO|0666,0); while(1) { fp=fopen(filename,”r”); 22Linux操作系统实训报告 fgets(readbuf,80,fp); printf(“收到的数据:%s﹨n”,readbuf); fclose(fp);} return(0); } 客户端代码: #include #include #define filename “myfifo” int main(int argc,char *argv[]) { FILE *fp; if(argc !=2) { printf(“Use: fileclient [string]﹨n”); exit(1); } { perror(“fopen”); exit(1); } fputs(argv[1],fp); fclose(fp); return(0); } if((fp=fopen(filename,”w”))==NULL) 运行结果如图4-2 、4-3所示。 图4-2 客户端 图4-3 服务器端 23Linux操作系统实训报告结 论 经过了一个星期的学习和实践,在老师和同学们的指导帮助下,我顺利完成了这次的Linux操作系统实训。 Linux操作系统是一个对我们来说很陌生的操作系统,从开始的查阅资料一直到第一次的上机操作,我都还停留在Windows的完全图形化界面中,完全不适应Linux的多命令操作(Linux也有图形操作),但是在其后的课程中跟随老师发给我们任务书的不断练习,我的思想也渐渐的转变了,开始适应这种快速的命令行操作。由于以前曾经接触过一些有关Linux的命令,因此我学习起来上手的也比较快,在短短的几次上机练习后就完全熟练了这种操作。 Linux下的编程也是比较实用的,可是当我们这些在Windows 下用惯了各种编译软件,转型到Linux下的时候,完全有点不知所措了,更在于这次有设计到很多关于修改Linux内核的编程,对我们这些初出茅庐的新手来说简直不知道该怎么办了,还好在老师的帮助下,我们免去了程序的编写,只需要在Linux上将程序调试、运行,即使这样,也是困难重重。在不断的尝试和摸索中,同时在老师的帮助下,我的C程序竟也全部运行出结果了。 Linux操作系统实训,仿佛让我们走进了另一个世界。接触了一种全新的事物,走出Windows走进Linux,我们感受到了不同操作系统直间的差别和优缺点使我们学到了更多课本上所不知道的知识。 在实训的最后,再次感谢老师们,老师渊源的学识、严谨求实的科学精神、一丝不苟的治学态度和高尚的品格,深深地感染了我们每一位同学,不仅使我们开阔了视野,拓宽了思路,增长了知识,而且为我们今后的工作和学习打下了牢固的基础,也增强了我们对计算机的兴趣。在大学中一起学的朋友,对我们有深远影响的老师们,将是我们在以后的工作和学习中的宝贵财富。 24
发布评论