【申嵌】Linux系统程序设计课堂实训练习
- 格式:pdf
- 大小:227.34 KB
- 文档页数:7
上机实习题:目录及其操作
1.熟悉Linux中各目录及操作:
操作步骤:
(1)显示当前主目录下的所有文件。
(2)以长格式显示当前目录的详细信息。
(3)列出当前包括子目录下的所有文件。
2.练习创建文件的链接:
操作步骤:
(1)说明文件的链接类型有哪两种,有什么区别?
(2)给cce目录下的README文件在root目录下创建一个符号链接
(3)给cce目录下的README文件在root目录下创建一个硬链接
3.文件的权限设定练习:
操作步骤:
(1)查看cce目录下各文件的类型及权限情况。
(2)采用文字设定法将cce下的README文件的操作权限改为:文件所有者为可读可写,同组用户为可读,其他用户没有操作权限。
(3)采用数字设定法将cce下的README文件的操作权限改为:文件所有者为可读可写可执行,同组用户为可读可写,其他用户为可读。
4.创建及删除用户练习:
操作步骤:
(1)添加一用户,用户名为user2010
(2)修改其密码
(3)删除此用户。
参考答案第一章一、填空题。
1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。
2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。
4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。
5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。
6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。
二、选择题1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。
(A)人、嵌入式处理器B、嵌入式控制器C、单片机D、集成芯片2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为—,并作为一种软件平台逐步成为目前国际嵌入式系统的主流。
(D)A、分时多任务操作系统B、多任务操作系统C、实时操作系统D、实时多任务操作系统3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。
( B)A、PalmB、VxWorksC、LinuxD、WinCE[在此处键入]4、嵌入式系统设计过程中一般需要考虑的因素不包括:(D)A、性能B、功耗C、价格D、大小5、在嵌入式系统中比较流行的主流程序有:(A)A、AngelB、BlobC、Red BootD、U-Boot 三、叙述题1、举例说明身边常用的嵌入式系统。
实训一Linux的安装一、实验内容[练习]在计算机中安装Linux系统。
[操作步骤](1)设置计算机从光驱启动。
把安装光盘放入光驱中,重新启动计算机。
出现安装信息时直接按回车键,以图形模式安装Linux。
(2)安装程序询问是否要进行光盘测试。
选择跳过测试,按Skip按钮。
(3)开始安装程序,选择语言,选择键盘布局,选择鼠标配置。
(4)选择安装类型,现在选择服务器类型。
(5)用Disk Druid手工分区磁盘,建立两个分区:交换分区和根分区。
(6)安装引导装载程序GRUB,选择Linux作为默认启动的操作系统。
(7)网络配置接受默认设置。
(8)防火墙配置接受默认设置。
(9)选择将要在系统中安装的语言,把其中一种设置为默认语言。
(10)选择时区,选择“亚洲/上海”。
(11)设置根口令,即管理员root的密码。
(12)接受验证配置的默认设置。
选择安装组件。
(13)开始安装软件。
(14)安装完成后,重新启动计算机。
实训二GNOME桌面环境的基本操作一、实验内容1.设置桌面[练习1]在桌面上新建文件管理器Nautilus的快捷方式(启动器)。
[操作步骤](1)鼠标右键单击桌面空白处,弹出快捷菜单,选择“新建启动器”,弹出“Create Launcher”对话框。
(2)在“名字”文本框中输入快捷图标的名字“Nautilus”,并在“命令”文本框中输入“/usr/bin/nautilus”,或者点击“浏览”按钮选择应用程序的路径。
(3)单击“无图标”按钮,弹出“浏览图标”窗口,选中“gnome-folder.png”图标,单击“确定”按钮,回到“Create Launcher”窗口。
(4)单击“确定”按钮后,桌面上创建了一个指定样式且名称为“Nautilus”的快捷图标。
(5)双击“Nautilus”图标,桌面上将打开文件管理器Nautilus。
[练习2] 设置桌面背景图片。
[操作步骤](1)单击“主菜单”|“首选项”|“背景”,打开“背景首选项”对话框。
实训二Linux的基本操作和常用命令的使用一、实验目的1.学会不同Linux用户登录的方法。
2.掌握常用Linux命令的使用方法。
3.了解Linux命令中参数选项的用法和作用。
二、实验工具与设备1.已安装Linux操作系统的计算机。
2.或装有Windows操作系统的计算机并通过网络与Linux服务器连接。
三、实验内容和步骤1.登录系统以适当的用户名在Windows下远程登录Linux主机,或在装有Linux系统的计算机中登录Linux系统。
2.文件操作命令(1)查看文件与目录ls(2)显示文件内容命令(cat)(3)文件复制命令(cp)(4)文件改名命令(mv)(5)删除文件命令(r m)3.目录操作命令的使用(1)改变当前目录命令(cd)和显示当前目录命令(pwd)(2)建立子目录命令(mkdir)在用户目录下创建如图所示的目录结构。
图创建的目录结构(3)删除子目录命令(rmdir)4.用户管理命令的使用(1)登录命令(login)和注销命令(logout)提示:可以直接用Ctrl+d退出或注销用户。
(2)添加和更改用户命令①添加用户②转换用户(3)修改用户密码命令(passwd)(4)关机命令(shutdown,终止或重启系统的命令)命令格式:shutdown [-r] [-h] [-c] [-k] [[+]时间]5.其他操作命令的使用(自选两三条即可,也可选择下面的参考命令)(1)查看用户命令who命令:查看当前正在登录的其他用户的命令。
whoami命令:查看当前正在使用(登录)的用户名。
(3)查看命令(2)帮助信息命令(man)四.实验要求:1.写出实验报告。
Linux网络操作系统与实训(第2版)教材课后习题答案《Linux网络操作系统与实训(第2版)》习题答案1.5 练习题一、选择题1. Linux最早是由计算机爱好者 B 开发的。
A. Richard PetersenB. Linus TorvaldsC. Rob PickD. Linux Sarwar2. 下列 C 是自由软件。
A. Windows XPB. UNIXC. LinuxD. Windows 20003. 下列 B 不是Linux的特点。
A. 多任务B. 单用户C. 设备独立性D.开放性4. Linux的内核版本2.3.20是 A 的版本。
A. 不稳定B. 稳定的C. 第三次修订D. 第二次修订二、填空题1. GUN的含义是:GNU's Not UNIX。
2. Linux一般有3个主要部分:内核(kernel)、命令解释层(Shell或其他操作环境)、实用工具。
4. 自2002年起,Red Hat将产品分成两个系列,即由Red Hat 公司提供收费技术支持和更新的Red Hat Enterprise Linux(RHEL)服务器版,以及由Fedora社区开发的桌面版本Fedora Core(FC)。
5. SELinux的全称是Security Enhanced Linux。
应用SELinux后,可以减轻恶意攻击或恶意软件带来的灾难,并对机密性和完整性有很高要求的信息提供安全保障。
三、简答题(略)1. 简述Red Hat Linux系统的特点。
2. 简述一些较为知名的Linux发行版本。
3. 为什么要使用Red Hat服务器版?4. 简述Red Hat Enterprise Linux 5的新特性。
2.9 练习题一、选择题1. Linux安装过程中的硬盘分区工具是 D 。
A. PQmagicB. FDISKC. FIPSD. Disk Druid2. Linux的根分区系统类型是 C 。
练习题(一)一、填空题1.__________________________________ 嵌入式系统一般包括 _______________ 、嵌入式操作系统和 ______________________________ 。
2.Arm7内核采用的是_______________ 体系结构。
3.S3C2410X芯片包含_____________ 通道PWM定时器和______________ 道内部计时器。
4.gcc的编译流程分为预处理.编译、 ______________ 和______________5.C语言中的预处理语句是以符号 _____________ 开头的。
6._________________________________________________ 多任务系统中有3个功能单位:任务、 _______________________________________________ 和____________ °二、选择题下列操作系统中具有Windows 图形界面的是( )A. VxWorksB. QNXC. Windows CE D・ Linux2•使vi编辑器处于可编辑状态的命令是( )A. r B・ p C. i D. b3 ・下列选项中,能帮助用户生成makefile 的工具是( )A. gcc B・ autotools C. gdb D. vi4.可以使用TFTP通过网络下载文件的命令是( )A. runB. tftpbootC. sleepD. mv5・下列不属于Linux系统中线程的是( )A.用户级现程B.网络级线程C.轻量级线程D.内核级线程6.下列选项中,常用于网络中不同机器之间的进程间通信的是& TCP/IP 参考模型包含几层A. 4B. 5C. 6D ・7()9.在TCP 中,用于发送数据的函数是()A. bind ()B. send ()C. accept ()D. recv ()10 .下列选项中,不 属于 Linux系统的设备分类的 是( )A.字符设备B.数据设备C.块设备D.网络设备三、判断对错1. Arm9采用的是5级指令流水线。
实训一安装Linux发行版CentOS 5一、实训目的:·了解Linux操作系统。
·掌握CentOS 5.4的安装方法。
二、实训环境:安装有VMWare虚拟机的计算机,CentOS 5.4光盘镜像文件。
三、实训内容1、建立虚拟机。
2、安装CentOS 5.4。
四、实训过程1、建立虚拟机○1新建虚拟机○2改变虚拟机设置,点击【编辑虚拟机设置】按钮。
○3移除软驱、USB、声卡等设备。
○4设置CD-ROM中ISO镜像文件的位置。
○5启动虚拟机2、安装CentOS 5.4○1用安装光盘启动计算机,直接按下<Enter>来进入图形介面的安装方式;○2检测硬件信息;○3检测光盘介质;○4安装欢迎界面;○5选择安装过程中的语言;○6选择键盘布局类型;○7磁盘分区配置;如果是全新硬盘,可能会发生错误信息,提示你,安装程序找不到分区表,此时,直接按下“Yes”按钮就可以了。
为磁盘分区设置对话框,选择“建立自定义的分区结构”即可。
建立四个分区,分别是/, /boot, /home与swap四个。
按下‘下一步’后就会出现分区视窗。
这个画面主要分为三大区块:硬盘的分区示意图,指令区,每个分区的装置档名、挂载点目录、档案系统类型、是否需要格式化、分区容量大小、开始与结束的磁柱号码等。
○8引导装载程序设置,可采用默认设置,直接单击“下一步”按钮;○9网络配置;○10时区选择;○11设置管理员密码(root密码);○12选择安装的软件包;○13准备安装;○14开始安装Linux系统;五、实训总结。
附录练习题及解答一、编程类:1. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B)?(A) : (B))这个测试是为下面的目的而设的:(1)标识#define在宏中应用的基本知识。
这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
(2)三重条件操作符的知识。
这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码。
(3)懂得在宏中小心地把参数用括号括起来2.预处理器标识#error的目的是什么?#error是C/C++语言预处理命令之一,当预处理器预处理到#error命令时,将停止编译并输出用户自定义的错误消息。
其中如果是C语言编辑器则执行#error命令,如果是C++命令则跳过该命令。
用来主动的检测不合规范的情况并提示报错。
#error 停止编译并显示错误信息例如,使用C编译器:#ifndef __cplusplus#error#endif#include <stdio.h>int main(){printf("Hello,World!");return 0;}3.内核有很多do……while(0);有何作用?do……while(0)用于避免在C中宏定义被展开时导致出错的问题。
例如:#define exch(x,y) {int tmp; tmp=x; x=y; y=tmp;}if (x > y)Exch(x,y);elsedo_something();展开:if (x > y){int tmp; tmp=x; x=y; y=tmp;};//此处多了个分号,使用时会出错。
elsedo_something();#define exch(x,y) do {int tmp; tmp=x; x=y; y=tmp;}while(0)//最后没有分号所以宏定义中涉及到函数的处理,最好使用do…while(0)封装。
linux入门练习题Linux是一种自由和开放源代码的类Unix操作系统,广泛应用于服务器端和嵌入式系统。
本文将提供一些Linux入门练习题,帮助读者熟悉和掌握Linux操作系统的基本知识和技能。
一、目录操作1. 创建一个名为"practice"的目录。
2. 在"practice"目录中创建一个名为"Documents"的子目录。
3. 在"practice"目录中创建一个空的文本文件"notes.txt"。
4. 将"notes.txt"文本文件移动到"Documents"子目录中。
5. 在"practice"目录中创建一个名为"images"的子目录,并将一张自己喜欢的图片复制到该目录中。
二、文件操作1. 创建一个名为"file1.txt"的文本文件。
2. 在"file1.txt"中写入"Hello, Linux!"。
3. 复制"file1.txt"并将副本命名为"file2.txt"。
4. 将"file1.txt"和"file2.txt"合并为一个文本文件"file3.txt"。
5. 删除"file1.txt"和"file2.txt"。
三、查询和过滤1. 在"practice"目录下,列出所有的文件和子目录。
2. 使用grep命令,查找"notes.txt"中包含关键词"Linux"的行。
3. 使用find命令,查找"practice"目录下所有以".txt"为扩展名的文件。
实训六DNS服务器的配置一、实验目的1.初步掌握DNS服务器的设置。
2.掌握DNS服务器的相关参数的设置。
二、实验工具与设备1.已经安装好Red Hat Linux系统的PC一台。
三、实验内容和步骤参考方法:(1)编辑named.conf文件options {listen-on port 53 { any; };listen-on-v6 port 53 { ::1; }; //限于IPV6directory "/var/named"; //指定区域配置文件所在的路径dump-file "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";// Those options should be used carefully because they disable port// randomization// query-source port 53; //指定客户端在提交DNS查询时必须使用的源端口// query-source-v6 port 53;allow-query { any; }; //指定接收DNS查询请求的客户端allow-query-cache { localhost; };allow-transfer { 192.168.0.11; }; //允许将DNS数据传输到192.168.0.11 };view localhost_resolver {match-clients { any; };match-destinations { any; }; recursion yes;include "/etc/named.zones";};(2)复制主配置文件并编辑[root@Server ~]#vi /var/named/chroot/etc/named.zones zone "" IN {type master;file ".zone";};zone "168.192.in-addr.arpa" IN {type master;file "192.168.zone";};(3)修改bind的区域配置文件-正向区域文件利用“cp -p named.zero .zone”复制正向区域配置文件,并编辑修改。
linux练习
1、先安装好Linux操作系统,并熟练掌握其文字模式的基本操作,包括文件及目录的管理、查看文件内容、权限设置等。
2、学习Linux的文件系统,学会如何挂载系统,作好硬件驱动程序安装。
3、进行Linux系统管理,学会用户管理、网络设置等,具有一定的基础。
4、学习Linux内核,熟练使用内核模块管理功能,了解Linux调度算法,对系统进行调优。
5、学习Linux系统编程,学习开发基本的Linux命令行工具,学会使用一些工具框架,比如Shell、Perl、Python、C、C++等。
6、学习Linux系统安全,掌握CIS(计算机信息系统)安全标准,了解常用的攻击技术,学会防护技术和密码学。
7、操作系统维护,学会进行系统安装、软件安装、系统升级等,以及定期的系统清理防护等。
LINUX实训考试试题(2015年)考前说明:1.本次考试为实机操作,考试时间为三个小时,考前准备的资料有:VMware_workstation_11.1.2.exe or VMware_workstation_10.0.1.exe;rhel-server-6.2-x86_64-dvd.iso or rhel-server-6.2-i386-dvd.iso orrhel-server-7.0-x86_64-dvd.iso注:根据考生实际情况决定至少安装一个VMware虚拟机与至少安装一个iso系统文件。
2.本次考试为开卷考试,可以看书、查资料;要求个人单独完成操作,严禁抄袭与代考,如有发现情况属实,抄袭者与被抄袭者,代考与被代考者成绩做0分处理。
3.考生需新建一个用自己班级+名字+学号的文件夹,用于存放自己的考试答题过程的截图,以作为评分依据。
考后提交给老师指定的收集人。
考题1:在VMware虚拟机上安装一台6或者7版本的red hat操作系统,要求如下:1最小化安装,时区为上海;硬盘分区:、boot 600M / 12000M swap 2048M:主机名设置为:www.考生名字拼音;root 密码:123456 新建用户名:student 密码:123456 其他为默认选择;新建用户:useradd studentpasswd student123456123456验证账号:[root@www ~]$状态下输入exit,并用student登录。
考题2:修改系统root密码为:!@#¥qwer重启,界面读秒时按e进入GUI界面GUI界面步骤:e//选择第二个e1bpasswd root!@#$qwer!@#$qwerreboot考题3:通过修改配置文件方式来配置网络;先用DHCP方式获得网络相关信息,做好记录;再将网络设置成静态相关信息。
vi /etc/sysconfig/network-scripts/ifcfg-eth0//大致修改后的文件内容如下DEVICE=eth0 #这是网卡的名称TYPE=Ethernet # 网卡类型ONBOOT=yes # 是否随着开机自启动BOOTPROTO=static #static表示固定ip地址,dhcp表示随机获取ipMM_CONTROLLED=yesIPADDR0=192.168.42.121 # 手动设置的固定ip地址(机房)NETMASK=255.255.255.0 #mask地址,就是掩码GA TEWAY0=192.168.42.1 #网关地址(机房)PREFIX0=24DNS0=202.192.72.33 #(机房)//修改好后,esc结束编辑,:wq保存并退出/etc/init.d/network restart//验证结果ip addr 或者ping一下试题4:配置好本地YUM源,并安装好:httpd bind tigervnc 三个软件包。
实训三Linux用户管理一、实训目的:·了解Linux账号的概念;·掌握常用Linux中添加账号的方法。
二、实训环境:安装有VMWare虚拟机的计算机,CentOS 5.4虚拟机文件系统。
三、实训内容1、添加、修改、删除Linux用户账号。
2、添加、修改、删除Linux组账号。
3、批量添加Linux用户账号。
四、实训过程1、添加、修改、删除Linux用户账号添加Linux用户账号:useradd -d /home/user02 -s /bin/bash user02修改Linux用户账号:usermod -c “Vice President”-d /root user02删除Linux用户账号:userdel –r user02修改Linux用户账号密码:passwd user022、添加、修改、删除Linux组账号添加Linux组账号:groupadd -g 600 test修改Linux组账号:groupmod -g 700 –n test1 test删除Linux组账号:groupdel test3、批量添加Linux用户账号○1编辑用户信息文件建立大量用户帐号,首先使用任何文件编辑器输入用户信息,这些用户信息字段必须符合/etc/passwd文件中字段的排列次序。
【例】:vi /root/account.txtstudent1:x:601:601::/home/student1:/bin/bashstudent2:x:602:602::/home/student2:/bin/bashstudent3:x:603:603::/home/student3:/bin/bashstudent4:x:604:604::/home/student4:/bin/bash○2newusers的主要功能是以批处理文件来更新或建立用户帐号newusers < /root/account.txt○3将/etc/shadow产生的shadow密码译码,然后回写到/etc/passwd中,同时也将/etc/shadow 文件中的密码字段删除,来取消shadow password的功能pwunconv○4建立密码文件vi /root/password.txtstudent1:lxniegh3student2:73h8sjk3student3:pqj37sestudent4:ka6h9dj7○5建立对应的密码表chpasswd < /root/passwd.txt五、实训总结。
第二章基本文件I/O1、书上实例练习2、设计一个程序,实现将一个字符串“Hi, I'm a Linux programmer!”写入到文件a.txt,然后将a.txt中前10个字符拷贝到文件b.txt中。
第三章进程与线程1、练习使用fork复制进程的例子,观察处理器的调度情况,尝试使用sleep(1)来改变调度顺序。
2、练习fork+execl/execv/execlp/execvp的结合使用。
3、waitpid实验 waitpid.c问题描述:首先使用fork新建一个子进程,并使子进程暂停5s(使用sleep函数),接下来,父进程使用waitpid函数,并使用参数WNOHANG使父进程不会阻塞。
若有子进程退出,则waitpid 返回子进程号;若没有子进程退出,则waitpid返回0,并且父进程每隔一秒循环判断一次。
提示:pr = waitpid(pid, NULL, WNOHANG)4、多进程程序实验 proc_expr1.c实验目的:熟练掌握fork, exec, waitpid等函数的使用问题描述:父进程依次创建两个子进程,其中一个子进程运行"ls -l"指令,另一个进程在暂停5s后异常退出,父进程并不阻塞自己,并等待子进程的退出信息,待收集到该信息,父进程就返回。
5、多线程编程实验:利用线程参数重用一个线程函数创建多线程。
(1)创建两个新线程,一个输出x,另一个输入o,每个线程输出固定字符数后就从线程函数中返回退出线程。
线程函数char_print在两个线程中均被执行,但是程序为每个线程指定不同的实例作为参数。
(2)引入pthread_join主线程收集两个子线程的退出信息,并释放资源。
6、互斥锁的使用方法 mutex_test.c目的:掌握互斥锁来进行线程同步的方法。
通过互斥锁来同步读、写线程对共享缓冲区的操作。
7、使用信号量同步线程实验 sem_test1.c目的:掌握使用信号量进行线程同步的方法。
(2) 修改程序使得三个线程的执行顺序为a->b->csem_test2.c上海嵌入式家园-开发板商城8、条件变量同步线程实验目的:掌握使用条件变量进行线程同步的方法。
cond_test.c第四章进程间的通信1、kill+signal 实现不同进程发送信号机制 kill_signal_expr.c创建一个子进程,父进程通过kill发送一个SIGTERM信号给子进程,子进程借助signal建立SIGTERM与信号处理函数的关联,当子进程接收到SIGTERM信号,使用execl函数终止自己。
提示:注意到execl函数的参数都是char *类型,因此必须使用sprintf将pid从int转换成char *,eg:char s[];sprintf(s,"%d",getpid());2、有名管道(命名管道)fifo_read.c, fifo_write.c编写两个程序,一个用于读管道,另一个用于写管道。
其中在读管道的程序里创建管道,并且作为main函数里的参数由用户输入要写入的内容。
读管道读出用户写入管道的内容。
要求:这两个函数用的是非阻塞读写管道。
eg:fd = open(FIFO, O_RDONLY | O_NONBLOCK, 0755);fd = open(FIFO, O_WRONLY | O_NONBLOCK, 0);3、信号量综合实例 ipc_sem_test.c问题描述:首先实现两个函数,用于请求和释放信号量,每个进程只能请求一次,定义一个全局变量semheld来记录请求次数,当semheld大于0时不再增加信号量,当semheld小于1时,不再释放信号量。
4、信号量应用实例sem_p_v.c问题描述:此应用程序实现了父子进程间对信号量的 PV 操作。
所谓 P 操作,就是将信号量的值减去1;所谓 V 操作,就是将信号量的值加1。
在此程序中,子进程创建了一个含有一个信号量的信号量集合,并初始化为5。
在前 5次 V 操作中,子进程每次 V 操作等待 1 秒,在后 5 次 V 操作中,子进程每次 V 操作等待 3秒。
父进程执行10次P操作,每次 P 操作等待 2 秒。
5、实现一个简单的消息队列工具,用于创建消息队列、发送、读取消息、改变权限以及删除消息队列。
msgtool实例, msgtool.c实现如下功能:上海嵌入式家园-开发板商城(1)发送消息msgtool s (type) “text”(2)读取消息msgtool r (type)(3)改变权限msgtool m (mode)(4)删除队列msgtool d6、消息队列应用实例练习: msg_receiver_example.c, msg_sender_example.c原理及功能说明此实例是一个简单的使用消息队列进行实时聊天的本机通信程序,发送端每发送一个消息,会立即被接收读取,在没有消息在消息队列中时,将处于阻塞状态。
其运行结果如下:(1)终端 1 运行接收端。
[root@localhost hanson]# ./msg_receiver_example //执行接收端最开始执行时,在消息队列中没有信息,处于阻塞状态。
(2)终端 2 运行发送端。
[root@localhost hanson]# ./msg_sender_example //执行发送端Enter the mssage to send:hello //输入信息Enter the mssage to send:yesEnter the mssage to send:goEnter the mssage to send:end //结束信号(3)有信息发送后,终端 1 接收到的信息。
receiver mssage:helloreceiver mssage:yesreceiver mssage:goreceiver mssage:end //通信结束在整个过程中,可以通过 ipcs –q 命令查看,以下验证了接收端接收到消息后,该消息将从消息队列中删除。
[root@localhost hanson]# ipcs –q //使用 ipcs –q 查看当前消息队列情况------ Message Queues --------key msqid owner perms used-bytes messages //无任何消息队列[root@localhost hanson]# ./msg_sender_example //执行发送消息命令Enter the mssage to send:helloEnter the mssage to send:worldEnter the mssage to send:embeddedEnter the mssage to send:end //结束发送消息[root@localhost ]# ipcs –q//查看当前消息队列使用情况------ Message Queues --------key msqid owner perms used-bytes messages0x00003039 65536 root 666 2048 4 //包括详细的使用情况上海嵌入式家园-开发板商城[root@localhost yangzongde]# ./msg_receiver_example //从消息队列中接收消息receiver mssage:helloreceiver mssage:worldreceiver mssage:embeddedreceiver mssage:end //接收完所有消息[root@localhost yangzongde]# ipcs –q//再次查看------ Message Queues --------key msqid owner perms used-bytes messages //无任何消息内容7、实现一个简单的共享内存工具shmtool,用于创建共享内存、写读共享内存、改变权限以及删除共享内存。
在读写操作的时候,如果共享内存已经存在,直接进行绑定并读写,否则先创建一个共享内存。
具体用法如下:(1)把字符串写入共享内存shmtool w "text"(2)从共享内存中读取文件shmtool r(3)改变权限shmtool m (mode)(4)删除共享内存shmtool d共享内存工具shmtool.c8、共享内存处理应用示例1 shm_expr.c共享内存实验实验内容:简单实现在一个进程中利用共享内存实现对文件的打开、读写操作。
(暂时不涉及共享内存同步机制,后续实验)实验步骤:(1)创建共享内存(2)映射共享内存(3)打开共享内存(4)先写一个字符串“hello”至共享内存,然后将共享内存中字符串数据写入文件中,最后读出文件中字符串内容(5)脱离共享内存绑定(6)删除共享内存9、共享内存处理应用示例 2 parent_child_shm_example.c功能描述:此程序实现父子进程通过共享内存进行数据通信。
子进程创建一个共享内存单元,然后子进程接受用户输入的信息(通过 argv[1]输入),并将其写入到共享内存单元;父进程则等待直到子进程退出,再从共享内存单元将该信息读出,并显示信息的个数。
此程序编译运行结果如下:上海嵌入式家园-开发板商城[root@localhost shmemory]# gcc -o parent_child_shm_example parent_child_shm_example.c //编译[root@localhost shmemory]# ./parent_child_shm_example //运行this is child.write argv[1] to shm.you input charater count is 13this is parent.input charater is //父进程显示写入到共享内存的信息10、共享内存处理应用示例 3shm_sem_example_send.cshm_sem_example_recv.c1.功能描述此程序实现没有亲缘关系的两个进程间通过共享内存进行数据通信,同时,使用信号量来保证两个进程的读写同步:即发送方在发送数据时,接收方不能接收数据;接收方在接收数据时,发送方不能发送数据。
在代码使用中,使用共享内存来传递数据,使用信号量来同步读写端(此处仅使用二元信号量)。
基本思路如下:1)首先设置信号量初始值为0,表示没有写入任何数据,不可以读。
2) 发送端在信号量的值为 0 时写入一段数据到共享内存中并阻塞读进程,写入完成后,置信号量的值为1,表示可以读数据。