Linux程序实验_第1页
Linux程序实验_第2页
Linux程序实验_第3页
Linux程序实验_第4页
Linux程序实验_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、?Linux程序设计?教学大纲Linux Program Design课程类别:学科专业教育课程 课程名称:Linux程序设计开课单位:软件学院课程编号:N03140112总 学 时:32 学 分:2适用专业:软件工程先修课程:程序设计根底一、课程在教学方案中的地位、作用通过讲授Linux的操作使用、系统结构和Linux环境下的程序设计,使学生对Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的根本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux环境下工作,进一步熟悉C语言程序设计和数据结构的知识,编写进行系统维护的脚本文

2、件和实用化的大型应用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程如高级操作系统、Linux内核源代码分析、嵌入式系统等打下根底。二、课程内容、根本要求第一章 linux根底1、了解什么是Linux,UNIX和Linux的历史,Linux/UNIX的系统结构;2、掌握Linux的根本命令和操作使用,Linux程序设计的预备知识。第二章 Shell程序设计1、了解什么是shell;2、掌握创立和执行Shell脚本,Shell程序设计的语法。第三章 Linux系统程序设计一文件操作与文件管理1、掌握Linux文件系统的实现,系统调用和标准I/O库,文件属性目录的实现和操作,系统数据

3、文件,文件锁,高级I/O。第四章Linux下简单的C程序设计1、掌握GCC的使方法2、掌握在linux下编写根本C程序。第五章 Linux系统程序设计二:进程控制和进程间通信1、了解进程的概念;2、掌握Linux中的进程和进程环境,进程控制,进程间的关系,信号,daemon进程,进程间通信,线程。第六章 Linux网络程序设计1、了解TCP/IP根底知识,什么是socket,socket编程,远程过程调用。2、掌握Linux平台数据结构的传送方法。三、实验实验一 Linux根本命令的使用1、学会并掌握linux的根本命令实验二 Shell程序设计1、 Shell程序设计中变量的使用;2、 理解

4、通道的概念并初步掌握它的使用方法;3、 掌握算术操作、字符串操作、逻辑操作、文件操作;4、 掌握if then fi、if then elif fi、case、while、for等控制语句;5、 在shell脚本中使用函数实验三文件操作与文件管理1、 熟悉Linux下常用的操作指令。2、 加深对文件,目录,文件系统等概念的理解。3、 掌握Linux文件系统的目录结构。4、 掌握有关Linux文件系统操作的常用命令。5、 了解有关文件平安方面的知识。实验四 Linux下简单的C程序设计1、了解并掌握GCC等Linux的开发调试环境。2、掌握使用标准C的文件操作函数和Linux的系统调用。实验五

5、进程控制和进程间通信1、理解和掌握UNIX和Linux进程通信系统调用的功能实验六 网络程序设计1、 理解Socket概念; 2、 理解并掌握Socket模型下获得本机IP信息的方法; 3、 理解并发效劳器模型,掌握通用套接字开发技术; 4、 掌握Linux平台数据结构的传送方法。四、学时分配章节名称讲授学时实验学时小计第一章linux根底325第二章Shell程序设计224第三章 Linux系统程序设计一文件操作与文件管理224第四章Linux下简单的C程序设计426第五章 Linux系统程序设计二:进程控制和进程间通信426第六章 Linux网络程序设计527

6、共计201232五、主要参考书?Linux环境C程序设计?、?linux简明教程?、?linux根底教程?六、考核方式包括作业、测验、考试等及其所占比例 考试:60% 实验:30%平时:10%?Linux程序设计?实验大纲Linux Program Design课程类别:学科专业教育课程 课程名称:Linux程序设计开课单位:软件学院课程编号:N03140112总 学 时:32 学 分:2适用专业:软件工程先修课程:程序设计根底一、实验教学目标熟练掌握shell编程、熟练使用linux系统、掌握进程控制和进程间通信,学会编写网络程序,学会在linux环境中编写web程序。养成一种良好的程序设计

7、风格。二、实验环境Linux三、实验教材及参考书:1 实验指导书自编讲义2?Linux环境C程序设计?徐诚高莹婷等清华大学出版社2021.13?linux入门到精通?刘忆智清华大学出版社2021.1四、实验成绩评定方式根据学生在实验过程中的认真程度、上机结果验收情况以及实验报告撰写质量,进行综合评定。五、实验工程及学时分配序号实验名称实验类别学时数备注1Linux根本命令的使用验证型22Shell程序设计设计型23文件操作与文件管理验证型24Linux下简单C程序设计验证型25进程控制和进程间通信设计型26网络程序设计验证型2六、实验内容及要求实验一 Linux根本命令的使用1、实验目的1学习

8、和掌握Linux的根本命令2增强学生对Linux的学习兴趣2、实验内容1linux的登录操作2常用根本命令的使用实验二 Shell程序设计1、实验目的1Shell程序设计中变量的使用; 2理解通道的概念并初步掌握它的使用方法; 3掌握算术操作、字符串操作、逻辑操作、文件操作; 4掌握if then fi、if then elif fi、case、while、for等控制语句;5在shell脚本中使用函数;2、实验内容1通过对shell程序的调试,理解变量$#,$0,$1,$2,$3,$的含义; 2Shel

9、l顺序程序设计; 3Shell分支程序与多分支程序设计; 4Shell循环程序设计。实验三文件操作与文件管理1、实验目的1熟悉Linux下常用的操作指令。2加深对文件,目录,文件系统等概念的理解。3掌握Linux文件系统的目录结构。4掌握有关Linux文件系统操作的常用命令。5了解有关文件平安方面的知识。2、实验内容Linux文件系统操作的常用命令。实验四Linux下简单C程序设计1、实验目的1学习和掌握gcc等Linux的开发调试环境。 2学会在Linux下编写C程序。2、实验内容1学习GCC编译程序2学习并分别使用标准C的文件操作函数和Linux的系统调用创立

10、一个对学生根本信息进行操作插入、修改和删除的C程序。实验五进程控制和进程间通信1、实验目的为了理解和掌握UNIX和Linux进程通信系统调用的功能,这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调用命令进行进程通信编程,以便通过学习,提高学生对进程通信系统调用的编程能力。2、实验内容编写一个有名管道程序。一个客户进程从键盘循环读一系列字符,将这些字符和发送者的pid发给效劳器进程,让其统计输入的是字符还是数字,分别为多少个,完成后再向客户进程发回效劳的结果,由客户进程输出。实验六网络程序设计1、实验目的1理解Socket概念; 2理解并掌握Socket模型下获得本

11、机IP信息的方法; 3理解并发效劳器模型,掌握通用套接字开发技术; 4掌握Linux平台数据结构的传送方法。2、实验内容1编写获得本机IP信息的程序;2编写基于并发效劳器模式的网络通信原型系统;3要求至少综合使用到实验目的中提到的三条或三条以上内容。?Linux程序设计?实验指导书实验类别:课内实验实验课程名称:Linux程序设计实验室名称:软件工程专业实验室实验课程编号:N03140112 总 学 时:32学分:2 适用专业:软件工程先修课程:Linux操作系统、C程序设计实验在教学培养方案中地位、作用:通过讲授Linux的操作使用、系统结构和Linux环境下的程序设计,

12、使学生对Linux操作系统获得一个全面的认识和掌握。一方面,学生通过学习系统程序设计,能够复习操作系统中的根本概念,对文件管理、进程控制有更深入的理解;另一方面,学生学会在Linux环境下工作,进一步熟悉C语言程序设计和数据结构的知识,编写进行系统维护的脚本文件和实用化的大型应用程序,如网络应用程序。同时,本课程为学生进一步学习其它后续课程如高级操作系统、Linux内核源代码分析、嵌入式系统等打下根底。实验一Linux根本命令的使用1、实验目的1学习和掌握Linux的根本命令2增强学生对Linux的学习兴趣2、实验内容1linux的登录操作2常用根本命令的使用3、实验要求1实验前认真预习实验内

13、容,详细了解本实验所涉及到的相关理论知识。2填写完整的实验报告。4、实验步骤步骤1:以user_login用户身份并使用telnet登录Linux效劳器,按照提示创立自己的账户和口令。步骤2:使用新创立的用户账户和口令登录Linux系统,观察登录后的界面。步骤3:使用pwd命令观察当前的工作目录,然后用ls命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF等不同选项并比拟不同之处。步骤4:在当前目录下建立一个名为test的新目录,然后将工作目录切换到test下,尝试将/etc目录下的文件passwd拷贝到该目录下cp 源文件目的目录。观察当前目录下的passwd文件的属主和文件权

14、限。步骤5:尝试向当前目录下的passwd文件和/etc/passwd文件分别写入一些新内容可使用echo “字符串>>文件的命令,看看操作能否成功,如果不能成功,请说明原因。用cat命令浏览文件password的内容,用more命令进行浏览翻页操作,再用less命令浏览文件的内容。比拟这几个命令的不同之处。步骤6:用ls命令查看test下文件的权限,用mv命令更改文件password的文件名为test.txt,尝试用chown和chgrp更改文件的属主为root、组为root,看看能否成功,不成功,请说明原因。尝试用chomd将文件权限为“-rw-。看看能否成功,不成功,请说明原

15、因。步骤7:用rm命令删除test目录下的所有文件,再用rmdir命令删除test目录。想一想有没有一条命令将目录及目录下的所有文件删除,写出这条命令步骤8:使用ps命令查看当前系统内的进程,并利用man命令获取ps命令的参数,写出获取当前终端进程执行情况的ps命令。步骤9:使用df命令查看当前系统已安装的文件系统的空间使用情况,记录结果。步骤10:使用du命令查看用户的工作目录占用了多少空间,记录结果。步骤11:使用free命令查看内存资源的使用情况,记录结果。实验二 Shell程序设计1、实验目的1Shell程序设计中变量的使用;2理解通道的概念并初步掌握它的使用方法;3掌握算术操作、字符

16、串操作、逻辑操作、文件操作;4掌握if then fi、if then elif fi、case、while、for等控制语句;5在shell脚本中使用函数;2、实验内容1通过对shell程序的调试,理解变量$#,$0,$1,$2,$3,$的含义;2Shell顺序程序设计;3Shell分支程序与多分支程序设计;4Shell循环程序设计。3、实验要求1实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。2填写完整的实验报告。4、实验步骤1 vi的使用步骤1:以root用户身份登录进入Linux 系统。步骤 2:启动Vi,切换到输入模式,输入一段英文:This ia&

17、#160;an exercise!  We use Vi to edit it. Left,down,up,right 步骤3:尝试匹配其中的一串字符,写出这命令及执行结果。/use步骤4:尝试替换其中的一串字符,写出这命令及执行结果。:s/This/aaa This/g步骤5:尝试复制/删除其中的一行或几行文本,写出命令及执行结果。Yy2p dd步骤6:尝试复制/删除其中的一个单词或几个字符,写出命令及执行结果。3ywpdw x步骤7:尝试使用鼠标复制文本,写出命令及执行结果。输入模式下:复制

18、粘贴步骤8:尝试存盘退出操作,写出命令。:wq newnamels可以用的命令:wq 或:x2.2 简单的shell程序步骤1:使用Vi将程序清单2-1的程序输入。步骤 2:尝试运行该程序,如果不能运行,原因是什么,怎样修改。步骤3:执行程序,写出程序的执行结果。步骤4:阅读程序,掌握shell函数的编写方法,补全函数file_run。for i in lsdoif test -x $i;thenecho $ifidone步骤5:修改程序中的函数uers(),使得显示在线用户时不分行。提示:可以使用循环,对每个在线用户分别处理。echo "there are who|wc -l us

19、ers online"for i in "who arenwho|awk 'print $1'"doecho -n $iecho -n""done程序清单清单2-1 menu# !/bin/bashMYDATE=date +%d/%m/%yTHIS_HOST=hostname -sUSER=whoamifile_run()# !/bin/bashfor i in lsdoif test -x $i;thenecho $ifidoneuers()# !/bin/bashecho "there are who|wc -l

20、users online"echo -e "who arenwho|awk 'print $1'"while :dotput clearcat<<aaa-User:$USERHost:$THIS_HOSTDate:$MYDATE-1 : List subdirectory in current directory 2 : List files in current directory which can run3 : See who is on the systemH : Help screenQ : Exit Menu-aaaecho

21、 -e -n "tYour Choice 1,2,3,H,Q >"read CHOICEcase $CHOICE in1) ls -l|awk '/d/ print $8' ;2) file_run;3) uers;H|h)cat<<aaaThis is the help screen,nothing here yet to help you!aaa;Q|q) exit 0;*) echo -e "t007 unkown user response"esacecho -e -n "nntHit the retu

22、rn key to continue"read DUMMYdone实验三文件操作与文件管理1、实验目的1熟悉Linux下常用的操作指令。2加深对文件,目录,文件系统等概念的理解。3掌握Linux文件系统的目录结构。4掌握有关Linux文件系统操作的常用命令。5了解有关文件平安方面的知识。22、实验内容Linux文件系统操作的常用命令。3、实验要求1实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。2填写完整的实验报告。4、实验步骤1.浏览文件系统1运行pwd命令,确定你当前的工作目录。2利用以下命令显示当前工作目录的内容:(理解各字段彻底意义。) 3运行以下命令:反应信息

23、中.代表本身目录,.代表其父目录;选项a可以显示隐藏文件;选项i可以显示文件的I节点号ls ai 4使用mkdir命令建立一个子目录subdir,并用ls查看当前目录。5使用带-d选项的ls命令,你只能看到有关子目录的信息(.表示本身目录)。6使用cd命令,将工作目录改到根目录/上。 用相对路径将工作目录改到根目录。 用绝对路径将工作目录改到根目录。7使用ls命令列出根目录的内容,再分别列出各子目录的内容,体会各目录作用及访问权限。8使用ls-l命令列出/dev的内容。Ls l /dev 列出/dev目录的内容,文件太多显示多屏,各行第一个字符为b的表示块特别文件;各行第一个字符为c的表示字符

24、特别文件。9使用不带参数的命令cd,然后用pwd命令确定你当前的工作目录是什麽。10使用命令cd ./.,你将工作目录移到什麽地方? 2.查看你的文件1利用cd命令,将工作目录改到你的主目录上。2将工作目录改到你的子目录subdir,然后运行命令:date > file1 将当前日期和时间存放到新建文件file1中。Ls l 反应信息中有新文件 file1。请注意并记下文件长度为:3使用cat命令查看file1文件的内容。4利用man命令显示date命令的用法说明文件:5将date命令的用法说明文件内容附加到文件file1的后面:注意file1文件长度为,较前变长。6利用ls -l fi

25、le1命令列出文件file1的较详细的信息。ls -l file1 注意第二字段链接记数的值为“1。7利用ln file1./fa命令进行文件链接。然后运行ls -l file1,查看显示的第二段的值发生了什麽变化。8现在想利用cat fa命令显示文件fa的内容,应该如何改开工作目录? 9利用cp file1 fa命令生成文件file1的副本。然后利用ls -l命令查看工作目录的内容。10将文件fa删除。再利用ls -l命令查看工作目录内容。11运行mv file1 file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中?3.文件存取权限1存取权限LINUX系统对所有文件设置了存取

26、权限。存取权限让你确定谁可以对你的个人文件和目录行访问,以及可以进行什麽操作。把所有用户分为三类:文件主user,即文件的属主。组用户group,即文件组的成员。其他用户other,即能对系统进行访问的所有其他用户。对一个文件的存取权限分为三种:读r写w执行x一组存取权限以及相应的文件类型统称为文件模式。如:rw-r-r-表示文件主有读和写的权限,组用户和其他用户只有读权限。2文件存取权限读权限r允许指定的用户可以翻开文件并阅读其内容。如cat,more,file和cp命令等。写权限w允许指定的用户可以翻开文件并修改其内容。如vi,mail,cp等。执行权限x允许指定的用户运行即执行一个二进制

27、文件文件或者把一个shell脚文件当做命令来运行。当你通过输入命令名来调用命令时,你必须具有该命令文件的执行限。3目录存取权限读权限r允许你列出相应目录中所存放的文件的名字即目录的内容表。写权限w允许你从目录中删除已有文件或者把新文件添加到目录中。查询权限x允许你在目录中进行查找和使用cd命令把工作目录放到它这里。4修改文件权限文件主或root用户可以使用chmod命令来修改文件或目录的权限。修改文件权限的方式有两种:符号模式和绝对模式。这里主要介绍符号模式。使用chmod命令修改当前权限设置的一般形式是:chmod key file file. 其中,key由以下成分组成:who +|-|=

28、 mode who这一局部可以由下面的一个和多个字符组成:u,g,o或a,它们分别表示文件主,组用户,其他用户或所有三种用户。默认值是a。第二局部必须是以下三个字符中的一个:+,-,或者=,分别表示增加,删除或者设定。mode成分可以由以下字符任意组合:r,w或x,分别表示读,写或者执行/查询的权限。以上三个局部必须依次输入,而且它们之间没有空格。在一个命令行中可以指定多个key,彼此间用逗号隔开,中间没有空格。如:设文件f原来的权限是rw-rw-r-,现在想让所有用户都具有执行权限,那么可使用以下命令:chmod a+x f ,该命令执行后,文件f的权限变成rwxrwxr-x。练习:mv f

29、ile_a file1 恢复文件file1;ls l 显示文件file1的权限为 rw-rw-r;1取消同组用户g和其他用户o 对文件可读的权利;2显示文件file1的权限。3恢复同组用户g和其他用户o 对文件可读的权利;4 配额管理1利用fdisk创立一个分区2格式化为ext 3文件系统3将该分区设置为自动挂载为/home.4创立两个用户hellen和jerry,组群为student4对/home文件系统实施用户级和组群级的配额管理,普通用户helen和jerry的软配额为150MB,硬配额为200MB,student组群的软配额为800MB,硬配额为900MB0实验四Linux下简单C程序

30、设计1、实验目的1学习和掌握gcc等Linux的开发调试环境。 2学会在Linux下编写C程序。2、实验内容1学习GCC编译程序2学习并分别使用标准C的文件操作函数和Linux的系统调用创立一个对学生根本信息进行操作插入、修改和删除的C程序。3、实验要求1实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。2填写完整的实验报告。4、实验步骤步骤1:使用Vi将程序清单3-1和3-2的程序输入,并在当前目录下创立文件“file.in和文件“file.out,尽可能的使文件“file.in大一些。步骤 2:利用gcc分别编译这两个程序,写出编译命令和执行结果,如果不成功,尝试利用

31、gdb调试。Gcc o list3_1 list3_1.cGcc o list3_2 list3_2.c步骤3:仔细观察这两个程序,比拟标准C的文件操作和Linux的系统调用open、read、write等的使用区别。答:一个是底层的系统调用,另一个是库函数调用,其效率略有差距,同时参数也不同。步骤4:按照说明重新修改程序3-2,并使用time命令观察程序执行的时间效率上有何区别。修改之前的系统时间: rootlocalhost # time ./ list3_2real 0m18.791suser 0m0.824ssys 0m17.317s修改之后的时间:_rootlocalhost # t

32、ime ./list3_2real 0m0.049suser 0m0.000ssys 0m0.036s步骤5:输入、编译并运行程序3-3和3-4,写出执行结果,并比拟他们fseek和lseek在使用方法上的异同程序3的运行结果是:在root目录下创立了文件hole.file而且文件的内容为:abcdefghij步骤6:学习并分别使用标准C的文件操作函数和Linux的系统调用创立一个对学生根本信息进行操作插入、修改和删除的C程序,学生根本信息以结构体的形式存储在文件中,struct stu_info的定义如下:struct stu_info char stu_num12;char

33、 name10;short int sex;/*0为女生,1为男生*/char mobile_phone12;程序清单/程序清单 3-1#include <stdio.h>#include <stdlib.h>int main(void)char c;FILE *in,*out;if(in = fopen("file.in","r")=NULL)perror("file open error!");exit(0);out = fopen("file.out","w");w

34、hile(c = fgetc(in)!=EOF)fputc(c,out);/程序清单 3-2#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>int main()/ char block1024; char c; int in, out; int nread;in = open("file.in", O_RDONLY); out = open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);/将注释翻开,并将

35、两条语句的后一句注释掉,重新编译执行。/ while(nread = read(in,block,sizeof(block) > 0)while(nread = read(in,&c,sizeof(c) > 0)/ write(out,block,nread);write(out,&c,nread);/程序清单 3-3#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h&g

36、t;#include <string.h>#include <stdlib.h>char buf1 = "abcdefghij"char buf2 = "ABCDEFGHIJ"void err_exit(char *err_s) perror(err_s); exit(1);int main(void)FILE *fp;if(fp = fopen("hole.file","w") = NULL)err_exit("file open fail!");if(fwrite(b

37、uf1,sizeof(buf1),1,fp)!=1)err_exit("file write buf1 error!");if(fseek(fp,40,SEEK_SET)=-1)err_exit("fseek error!");if(fwrite(buf2,strlen(buf2),1,fp)!=1)err_exit("file write buf2 error!");fclose(fp);/程序清单 3-4#include <stdio.h>#include <unistd.h>#include <fc

38、ntl.h>#include <sys/stat.h>#include <sys/types.h>char buf1 = "abcdefghij"char buf2 = "ABCDEFGHIJ"void err_exit(char *err_s)perror(err_s);exit(1);int main(void)int fd;if(fd = open("hole.file",O_WRONLY|O_CREAT/*|O_APPEND,0644*/) = -1)err_exit("file ope

39、n fail!");if(write(fd,buf1,10)!=10)err_exit("file write buf1 error!");if(lseek(fd,40,SEEK_SET)=-1)err_exit("lseek error!");if(write(fd,buf2,10)!=10)err_exit("file write buf2 error!");实验五进程控制和进程间通信1、实验目的为了理解和掌握UNIX和Linux进程通信系统调用的功能,这里给出了进程通信实现机制中使用的系统调用命令的格式和如何利用系统调

40、用命令进行进程通信编程,以便通过学习,提高学生对进程通信系统调用的编程能力。2、实验内容编写一个有名管道程序。一个客户进程从键盘循环读一系列字符,将这些字符和发送者的pid发给效劳器进程,让其统计输入的是字符还是数字,分别为多少个,完成后再向客户进程发回效劳的结果,由客户进程输出。3、实验要求1实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。2填写完整的实验报告。4、实验步骤步骤1:使用Vi将程序清单4-1的程序输入、编译并运行,学习和掌握fork的根本调用方法。步骤 2:使用Vi将程序清单4-2、4-3和4-4的程序输入、利用gcc分别编译这三个程序,写出编译命令和编译结果,如

41、果不成功,尝试利用gdb调试。rootlocalhost # gcc -o 4_2 4_2.c4_2.c:43:2: warning: no newline at end of filerootlocalhost # ./4_2child failed.4-3 rootlocalhost # gcc -o father father.cfather.c: In function main':father.c:7: error: l' undeclared (first use in this function)father.c:7: error: (Each undeclare

42、d identifier is reported only oncefather.c:7: error: for each function it appears in.)father.c:8: error: stray '129' in programfather.c:8: error: syntax error before numeric constantfather.c:8: error: stray '132' in programfather.c:10:2: warning: no newline at end of file rootlocalho

43、st # gcc -o child child.cchild.c:7:2: warning: no newline at end of filerootlocalhost # ./childhellohellochild, child.步骤3:写出编译这三个程序的makefile,然后利用make进行编译,谈谈这么做的好处。可以节省劳动时间,让三个程序同时编译,简化了操作。步骤4:运行这三个程序,写出运行结果。42的运行结果:4_2.c:43:2: warning: no newline at end of filerootlocalhost # ./4_2Parent is using pi

44、pe write.child, child._43的运行结果:rootlocalhost # ./fatherParent is using pipe write.44的运行结果是:_rootlocalhost # ./childhello child!hello child!child, child.步骤5:屏幕上显示出的执行结果是哪一个进程执行的结果?Father.c步骤6:父进程中的printf有向屏幕输出吗?为什么?没有,因为父进程的标准输出已经被重定向。步骤7:利用父子进程间的管道通信方式,改写实验3步骤6要求的程序。要求启用两个进程,其中父进程接受用户对文件的操作命

45、令然后通过管道发给子进程,子进程完成对文件的实际操作。程序清单/程序清单 4-1#include <unistd.h>#include <stdio.h>#include "err_exit.h"int global = 5;int main(void)pid_t pid;char *string = "these are values before fork:"int local = 10;printf("before fork * * *nn");if(pid = fork()<0)err_exit(

46、"fork error");if(pid = 0)string = "I am child."printf("nMy pid is %d,%sn""pid = %dn global = %dn local = %dn",getpid(),string,pid,global,local);global+;elsestring = "I am parent."printf("nMy pid is %d,%sn""pid = %dn global = %dn local

47、= %dn",getpid(),string,pid,global,local);local+;printf("%sn Now,global = %d,local = %dn",string,global,local);exit(EXIT_SUCCESS);/清单4-2 管道程序# define STD_INPUT 0/ 定义标准输入设备描述符# define STD_OUTPUT 1/ 定义标准输出设备描述符int fd2;main()static char process1=father,process2=child;pipe(fd);/ 定义管道 pipel

48、ine(process1,process2);/ 调用自定义函数pipeline() exit(1);/ 程序结束pipeline(char* process1,char* process2)int i;if (i=fork()=-1) / 创立进程,失败退出perror(“process fork error!);exit(1);if (i) close(fd0);/ 关闭管道输入描述符 close(STD_OUTPUT);/ 关闭标准输出描述符1 dup(fd1);/ 指定标准输出描述符1为管道写指针 close(fd1);/ 关闭原始管道写指针 execl(process1, proce

49、ss1, 0);/ 用程序father覆盖当前程序printf(“ father failed.n);/ execl()执行失败 else close(fd1);/ 关闭管道输出描述符 close(STD_INPUT);/ 关闭标准输入描述符0 dup(fd0);/ 指定标准输入描述符0为管道读指针 close(fd0);/ 关闭原始管道读指针 execl(process2,process2,0);/ 用程序child覆盖当前程序printf(“child failed.n);/ execl()执行失败 exit(2);/ 程序结束清单 4-3 father.cmain()static cha

50、r string = “Parent is using pipe write. ;int len;len = sizeof(string) ; write(1, string, len) ;/* 将string中的内容写入管道中 */printf(“parent, parent, parent n n n ) exit(0) ;清单4-4 child.cmain()char output30 ; read (0, output, 30) ;/* 从管道中读数据并存入output中 */printf(“%s n child, child. n , output) ;return(0)

51、;实验六网络程序设计1、实验目的1理解Socket概念; 2理解并掌握Socket模型下获得本机IP信息的方法; 3理解并发效劳器模型,掌握通用套接字开发技术; 4掌握Linux平台数据结构的传送方法。2、实验内容1编写获得本机IP信息的程序;2编写基于并发效劳器模式的网络通信原型系统;3要求至少综合使用到实验目的中提到的三条或三条以上内容。3、实验要求1实验前认真预习实验内容,详细了解本实验所涉及到的相关理论知识。2填写完整的实验报告。4、实验步骤1、准备工作将虚拟机网络连接设置为桥接方式自定义->VMnet0;在虚拟机Linux系统中设置网络设备设置为自

52、动获取IP地址方式DHCP,让后通过ipconfig命令查看eth0的IP地址,并记录。步骤为:RedHat主菜单->系统设置->网络,编辑按钮,选择单项选择按钮“自动获取IP地址设置使用。设置完毕的检测方法:可以两个同学之间使用ping命令互相测试。2、UDP客户端程序设计设计一个基于UDP协议SOCK_DGRAM类型套接字的客户端程序。程序的功能为,向教师机效劳器端程序发送字符串内容:学号+姓名。效劳器端的IP地址默认为17或临时通知,端口号为5555。(1) 使用Linux下的VIM编写代码。参考程序udpclient.c:/* UDPClient.

53、c#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <errno.h>#include <time.h>#include <string.h>#include <stdio.h>#define BUFFLEN 1024#define SERVER_PORT 5555int main(int argc,char *argv)int s;struct sockaddr_in server;time_t now;char buffBUFFLEN;int n = 0;int len = 0;s = socket (AF_INET,SOCK_DGRAM,0);if(s<0)fprintf(stderr,"So

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论