




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Linux操作系统下C言语的运用 授课教师:江兰帆授课教师:江兰帆: jiang_lanfan126GCC的运用的运用在在LINUX开发环境下,开发环境下,GCC(GNU C Compile)是进展是进展C程程序开发不可或缺的编译工具,它序开发不可或缺的编译工具,它是在是在GNU/Linux系统下的规范系统下的规范C编编译器。译器。GCC的运用的运用#includeint main(void)printf(“Hello World!n);将这个程序命名为将这个程序命名为test.cGCC的运用的运用输入命令对程序进展编译:输入命令对程序进展编译:gcc test.c GCC将创建一个名叫将创
2、建一个名叫a.out的可执行文件,的可执行文件,输入命令:输入命令:./a.out ,程序运转。,程序运转。“ ./ 表示执行当前目录下的可执行文件表示执行当前目录下的可执行文件或脚本程序或脚本程序GCC的运用的运用用户还可以经过运用选项用户还可以经过运用选项-o来改动来改动编译后的文件名,假设输入:编译后的文件名,假设输入:gcc -o test test.c此时此时test.c将被编译成可执行文件将被编译成可执行文件test,而不是,而不是a.out。输入:输入:./test,输出:,输出:Hello World!GCC的运用的运用gcc在执行编译任务的时候,总共需求在执行编译任务的时候,
3、总共需求4步步: 1.预处置:生成预处置:生成.i的文件的文件预处置器预处置器cpp2.编译:将预处置后的文件转换成汇编言语编译:将预处置后的文件转换成汇编言语,生成生成文件文件.s编译器编译器egcs 3.汇编:由汇编变为目的代码汇编:由汇编变为目的代码(机器代码机器代码),生成,生成.o的文件的文件汇编器汇编器as 4.链接:衔接目的代码,生成可执行程序链接:衔接目的代码,生成可执行程序链接器链接器ld GCC的运用的运用1、运用、运用GCCGCC是基于命令行的,运用时通常后跟是基于命令行的,运用时通常后跟一些选项和文件名。一些选项和文件名。Gcc的根本用法如的根本用法如下:下: gcc
4、options filenames GCC的运用的运用2、GCC的常用选项的常用选项编译选项:编译选项:gcc有超越有超越100个的编译选项个的编译选项可用。详细的可用命令可用。详细的可用命令man gcc察看察看 。gcc常用的编译参数:常用的编译参数:-o 选择产生的目的文件的称号,缺省的时选择产生的目的文件的称号,缺省的时候候,gcc 编译出来的文件是编译出来的文件是a.out 编译选项编译选项-l 选择要运用到的链接库。选择要运用到的链接库。 Linux下的大下的大多数库文件默许放到多数库文件默许放到/usr/lib/目录下目录下 -I 为为include文件的搜索指定目录。文件的搜索
5、指定目录。Linux下的大多数函数都默许将头文件放到下的大多数函数都默许将头文件放到/usr/include/目录下目录下 -c 只对文件进展预处置、编译和汇编,但只对文件进展预处置、编译和汇编,但不进展衔接不进展衔接GCC的运用的运用优化选项:用GCC编译C/C+代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。选项:-O1、-O2 、-O3 。数字越高,代表GCC的优化级别越高,程序将运转的更快。优化?优化?优化虽然可以给程序带来更好的执行性能,但优化虽然可以给程序带来更好的执行性能,但在如下一些场所
6、中应该防止优化代码:在如下一些场所中应该防止优化代码: 程序开发的时候:优化等级越高,耗费在编译上程序开发的时候:优化等级越高,耗费在编译上的时间就越长,因此在开发的时候最好不要运的时间就越长,因此在开发的时候最好不要运用优化选项,只需到软件发行或开发终了的时用优化选项,只需到软件发行或开发终了的时候,才思索对最终生成的代码进展优化。候,才思索对最终生成的代码进展优化。 优化?优化?l资源受限的时候:一些优化选项会添加可执行代资源受限的时候:一些优化选项会添加可执行代码的体积,假设程序在运转时可以恳求到的内存码的体积,假设程序在运转时可以恳求到的内存资源非常紧张如一些实时嵌入式设备,那就资源非
7、常紧张如一些实时嵌入式设备,那就不要对代码进展优化,由于由这带来的负面影响不要对代码进展优化,由于由这带来的负面影响能够会产生非常严重的后果。能够会产生非常严重的后果。 l跟踪调试的时候:在对代码进展优化的时候,某跟踪调试的时候:在对代码进展优化的时候,某些代码能够会被删除或改写,或者为了获得更佳些代码能够会被删除或改写,或者为了获得更佳的性能而进展重组,从而使跟踪和调试变得异常的性能而进展重组,从而使跟踪和调试变得异常困难。困难。 调试和分析选项调试和分析选项-g显示调试排错信息以供显示调试排错信息以供GDB运用运用需求留意的是,运用任何一个调试选项需求留意的是,运用任何一个调试选项都会使最
8、终生成的二进制文件的大小急都会使最终生成的二进制文件的大小急剧添加,同时添加程序在执行时的开销,剧添加,同时添加程序在执行时的开销,因此调试选项通常仅在软件的开发和调因此调试选项通常仅在软件的开发和调试阶段运用。试阶段运用。 C+编译器编译器g+GNU C+编译器编译器g+和和C编译器的格式编译器的格式一样,所运用的选项和完成的任务也是一样,所运用的选项和完成的任务也是一样的。一样的。g+ -options filename进程控制进程控制 进程的创建进程的创建fork系统调用创建新的子进程系统调用创建新的子进程#includeunistd.h pid_t fork(); 当一个进程调用了当一
9、个进程调用了fork以后以后,系统会创建一系统会创建一个子进程。这个子进程和父进程不同的地个子进程。这个子进程和父进程不同的地方只需他的进程方只需他的进程ID和父进程和父进程ID,其他的都,其他的都是一样,就象父进程克隆是一样,就象父进程克隆(clone)本人一样。本人一样。 进程的创建进程的创建一个程序一调用fork函数,系统就为一个新的进程预备了三个段。首先,系统让新的进程与旧的进程运用同一个代码段,由于它们的程序还是一样的,对于数据段和堆栈段,系统那么复制一份给新的进程。这样,父进程的一切数据都可以留给子进程,但是,子进程一旦开场运转,虽然它承继了父进程的一切数据,但实践上数据却曾经分开
10、,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。 进程的创建进程的创建根据根据fork的前往值来区分父子进程:的前往值来区分父子进程: 当当fork调用失败的时候调用失败的时候(内存缺乏或者是内存缺乏或者是用户的最大进程数已到用户的最大进程数已到)fork前往前往-1对于父进程对于父进程fork前往子进程的前往子进程的ID对于子进程对于子进程fork前往前往0example#include#include#includeint main( ) pid_t pid; if ( (pid=fork() )= 0 ) /* 子进程程序子进程程序 */ printf(“This is c
11、hild process,pid is %dn,getpid(); else /* 父进程程序父进程程序*/ printf(This is father process,pid is %dn“,getpid(); exerciseint main() int i;for(i=0 ;i3 ;i+ ) printf(“i=%d,pid is %dn,i,getpid(); fork(); 程序输出结果是什么?能否和他想的一样?为什么?程序输出结果是什么?能否和他想的一样?为什么?exec系统调用系统调用#include int execl(const char *path, const char
12、*arg, .); int execlp(const char *file, const char *arg, .); int execle(const char *path, const char *arg , ., char * const envp);int execv(const char *path, char *const argv); int execvp(const char *file, char *const argv);int execve(const char * filename,char * const argv ,char * const envp ); exec
13、系统调用系统调用exec族函数一共有上面所列的族函数一共有上面所列的6个,作用都个,作用都是一样:执行一段新的代码。区别只是向函是一样:执行一段新的代码。区别只是向函数传送的参数方式不同而已数传送的参数方式不同而已 。exec系统调用系统调用int execl(const char * path, const char * arg, .);函数阐明函数阐明: execl()用来执行参数用来执行参数path字符串所代表字符串所代表的文件途径,接下来的参数代表执行该文件时传送的文件途径,接下来的参数代表执行该文件时传送过去的过去的argv(0)、argv1,最后一个参数必需,最后一个参数必需用空指
14、针用空指针(NULL)作终了。作终了。前往值前往值 :假设执行胜利那么函数不会前往,执行失假设执行胜利那么函数不会前往,执行失败那么直接前往败那么直接前往-1范例范例 #includeint main()execl( “/bin/ls, ls, -al, /etc/passwd, (char * )0 );/*执行执行/bin/ls -al /etc/passwd */-rw-r-r- 1 root root 705 Sep 3 13 :52 /etc/passwd进程的终止进程的终止exit 系统调用终止进程执行系统调用终止进程执行格式:格式:void exit ( int status )
15、参数参数status是调用进程终止时传送给其父进是调用进程终止时传送给其父进程的值。如调用进程还有子进程,那么将其程的值。如调用进程还有子进程,那么将其一切子进程的父进程改为一切子进程的父进程改为1号进程。号进程。wait 系统调用等待子进程暂停或终止系统调用等待子进程暂停或终止格式:格式:int wait(int *status) wait 调用将调用进程挂起,直到该进程调用将调用进程挂起,直到该进程收到一个被其捕获的信号或者它的任何收到一个被其捕获的信号或者它的任何一个子进程暂停或终止为止。假设一个子进程暂停或终止为止。假设wait 调用之前已有子进程暂停或终止,那么调用之前已有子进程暂停或终止,那么该调用立刻前往。该调用立刻前往。include includeint main(int argc,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保障性住房安置房产权交易合同范本
- 山区监控安装方案
- 场地开业延误责任及赔偿协议
- 成都二手房买卖合同中附属设施及公共区域使用协议
- 私营企业采购方案
- 超市厕所保洁服务承包合同范本
- 潍坊幼师面试题及答案
- 内科急诊处置流程
- 公路变迁调查方案
- 冠心病健康大讲堂
- 书籍保密协议书范文
- 2025年章鱼小丸子项目可行性研究报告
- “中小学生每天至少2小时体育活动”的价值追求与实现路径研究
- 2024年四川成都农业科技中心招聘笔试真题
- 成都市房产抵押合同模板2025年
- 2025年滨州生物会考试题及答案
- 肾穿刺术的围手术期护理
- 2024年宁夏物流集团有限责任公司公开招聘笔试参考题库附带答案详解
- 四川省2024年普通高等学校高职教育单独招生文化考试数学试题
- 原材料管理制度文件
- 2025年贵州省罗甸县事业单位人才引进166人历年高频重点提升(共500题)附带答案详解
评论
0/150
提交评论