- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
实验报告模板
实验名称实验二常用开发工具+Linux进程管理学院
姓名学号班级
实验地点实验日期评分
指导老师同组其他成员
一、实验目的
1.掌握C语言编译的基本用法。
2.掌握gdb调试工具的基本用法。
3.加深对进程概念的理解,明确进程和程序的区别。
4.进一步认识并发执行的实质。
5.了解Linux系统中进程通信的基本原理。
二、实验环境
VMware,RedHatLinux
三、实验内容
1.利用gcc编译C语言程序,使用不同选项,观察并分析显示结果。
2.用gdb调试一个编译后的C语言程序。
3.运行Linux进程的创建程序,观察运行结果。
4.利用fork函数,编写程序。
5.利用软中断系统功能调用,编写程序。
四、实验结果(含程序、数据记录及分析和实验总结等)
1.编写一个helloworld.c程序,使用下列选项对它进行编译:-I,-D,-E,-c,
-o,-l。
编写好的helloworld.c
使用-I,包含myinclude目录下的文件,显示未找到
使用-D定义宏,并使用-o输出,运行成功
使用-E对helloworld.c文件进行预处理,由于未加-o,所以将结果直接输出到
控制台:
-c表示仅仅汇编及编译代码,不进行链接。也就是将源代码编译成.o文件。
-o已经在前面使用过,指定输出文件名
-l,如果为-lname,则链接时装载名为libname.a的函数库,如图,载入了libm.a
库进行编译:
2.利用gdb调试下面的程序:
/*dbme.c*/
#includestdio.h
#includestdlib.h
#defineBIGNUM1000
voidindex_m(intary[],floatfary[]);
intmain()
{
intintary[100];
floatfltary[100];
index_m(intary,fltary);
exit(EXIT_SUCCESS);
}
voidindex_m(intary[],floatfary[])
{
inti;
floatf=3.14;
for(i=0;iBIGNUM;++i){
ary[i]=i;
fary[i]=i*f;
}
}
(1)使用带-g选项的gcc命令对该程序进行编译$gcc–gdbme.c–odbme,然后运行
该程序$./dbme,屏幕显示什么?
注意,此处如果使用BIGNUM的常量,则会显示正常退出。
无奈直接将BIGNUM换为1000,编译后运行显示段错误。
(2)用程序名dbme作为参数启动gdb。
(3)在gdb环境下运行该程序,gdb给出的程序错误出现在哪里?利用backtree
命令生成导致错误的函数树。使用list命令显示出错行的上下文。
如图所示,错误出现在第20行,ary[i]=i
(4)设置断点,让程序在文件dbme.c的第20行且i等于100时停止执行。然后
运行该程序,并检查有关变量的值。
运行该程序,可见程序停在第20行,且此时i的变量值为100
3.进程的创建。编写一段C程序,使用系统调用fork()创建两个子进程。当此
程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏
幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和
“c”。试观察记录屏幕上的显示结果,并分析原因。
编写的fork2.c程序
编译并执行,可见输出为”bca”
原因:程序通过判断pid来确定进程的关系,当系统调用父进程的时候,为其分
配了一个大于0的pid,而fork得到的子进程pid为0,子进程1先启动,输出b,
紧接着返回到父进程,然后父进
文档评论(0)