已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux编程实验内容Linux下C语言编辑和编译环境实验目的:熟悉Linux下C语言vi编辑器用法,利用gcc编译器对C程序进行编译实验内容:1.vi编辑器用法 2.gcc编译器 GNU C 编译器(GCC)是一个全功能的 ANSI C 兼容编译器.使用 GCC通常后跟一些选项和文件名来使用 GCC 编译器. gcc 命令的基本用法如下:gcc options filenames命令行选项指定的操作将在命令行上每个给出的文件上执行. GCC 选项当你不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为 a.out 的可执行文件. 例如, 下面的命令将在当前目录下产生一个叫 a.out 的文件:gcc test.c你能用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out. 例如, 将一个叫 count.c 的 C 程序编译为名叫 count 的可执行文件, 你将输入下面的命令:gcc -o count count.c-c参数,只编译生成一个目标文件而生成可执行文件.-o outputfilename参数, -o 编译选项生成可执行文件outputfilenameLinux下多进程编程方法1.Process Process ID简称PID. 利用PS明令可以查看当前内存中的进程. 在Linux下有两个System call:getpid():返回本进程的PIDgetppid():返回父进程的PID例程: #include #include #include int main() pid_t self,parent; self=getpid(); parent=getppid(); printf(PID: %d,Parent PID: %dn,(int)self,(int)parent ); return 0; 2.建立进程 Linux提供两个system call 来建立Process fork( ) exec系列函数:execpvle( )(1)fork()函数 在Linux下产生新的进程的系统调用就是fork函数,这个函数名是英文中“分叉”的意思。为什么取这个 名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了,所以这个名字取得很形象。下面就看看如何具体使用fork,这段程序演示了使用fork的基本框架: #include #include #include int main() pid_t self,child; self=getpid(); child=fork(); if(child !=0) printf(Parent process,PID: %dn,self);printf(Child process ID: %dn, child); else printf(This is the child process,PID: %dn,(int)getpid(); return 0; 那么调用这个fork函数时发生了什么呢?一个程序一调用fork函数,系统就为一个新的进程准备了代码段,数据段和堆栈段.首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于数据段和堆栈段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。 对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。 fork()在parent process里会拷贝一份相同的process成为child process,并且继续往下执行.(2) exec系列函数 作用:启动另一程序的执行.一个进程一旦调用exec类函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。 系列函数exec加上pvle的字尾组合,说明如下:execl: 加上l表示要利用C的var args机制来传递程序参数.execv:表示利用数组来传递程序参数.execl()函数格式: int execl(const char *path, const char *arg, .);execp:在环境变量PATH所指定的路径里查找外部程序.若没有加上p,则必须指定完整路径.int execv(const char *path, char *const argv);int execvp(const char *file, char *const argv);execl()使用范例#include #include #include main() pid_t pid; printf(Now only one processn); printf(Calling fork.n); pid=fork(); if(pid=0) /*进程为子进程*/ printf(I am the childn);execl(/bin/ls,-l,NULL);/*如果execl返回,说明调用失败*/perror(execl failed to run ls); exit(1); else if(pid0) /*进程为父进程*/ printf(Im the parent, my childs pid is %dn,pid); execl(/bin/ps,-c,NULL); /*如果execl返回,说明调用失败*/ perror(execl failed to run ls); exit(1); else printf(Fork fall!n);execvp使用范例:#include #include #include #include int main() char *arg_list = ls, -l, /home, NULL ; execvp(ls,arg_list); printf(The end of the program.n); return 0;示例程序1: #include #include #include int main() pid_t self,parent; self=getpid(); parent=getppid(); printf(PID: %d,Parent PID: %dn,(int)self,(int)parent ); return 0; 示例程序2: #include #include #include int main() pid_t self,child; self=getpid(); child=fork(); if(child !=0) printf(Parent process,PID: %dn,self);printf(Child process ID: %dn, child); else printf(This is the child process,PID: %dn,(int)getpid(); return 0; 示例程序3:#include #include #include main() pid_t pid; printf(Now only one processn); printf(Calling fork.n); pid=fork(); if(pid=0) /*进程为子进程*/ printf(I am the childn);execl(/bin/ls,-l,NULL);/*如果execl返回,说明调用失败*/perror(execl failed to run ls); return 0 else if(pid0) /*进程为父进程*/ printf(Im the parent, my childs pid is %dn,pid); execl(/bin/pwd,NULL); /*如果execl返回,说明调用失败*/ perror(execl failed to run ls); return 0; else printf(Fork fall!n);Linux下多进程服务程序编程内容:在主程序中显示一个文本菜单,提供如下服务: 1. 日历服务 2. 日期服务。 3. 判断闰年服务。 4.退出。要求:1.每个服务都通过生成子进程来提供。 2.能够对自己所编程序做出解释。主程序Service.c#include #include #include main() pid_t pid; int choice; printf(1.日历服务n); printf(2.日期服务n); printf(3.判断闰年服务n); printf(4.退出n); printf(please input your choice:); scanf(%d,&choice); switch(choice) case 1:pid=fork(); if(pid=0) execl(/usr/bin/cal,cal,6,2006,NULL); perror(execl failed to run); break; else if(pid0) wait(NULL); break; case 2:pid=fork(); if(pid=0) execl(/bin/date,date,NULL); perror(execl failed to run); break; else if(pid0) wait(NULL); break; case 3:pid=fork(); if(pid=0) execl(./leap,leap,NULL); perror(execl failed to run); break; else if(pid0) wait(NULL); b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国装配式建筑行业政策推动与市场渗透率报告
- 2025中国裁断机行业市场周期性与波动规律分析报告
- 2025年工业互联网平台设备数字孪生体构建工具报告
- 2025山东日照经济技术开发区总工会公开招聘社会化工会工作者4人考试笔试模拟试题及答案解析
- 2025年中国化学工程集团有限公司定点帮扶华池县专项招聘(193人)考试笔试模拟试题及答案解析
- 2026河北石家庄市事业单位英才入石选聘512人考试笔试模拟试题及答案解析
- 砌墙体施工合同试卷教案
- 2026年美容服务合同
- 2026年医院家具采购合同
- 2026年建筑节水技术实施协议
- 起重设备安装人员岗位责任划分方案
- 《工程造价鉴定意见书示范文本》
- 2025-2030中国神经介入医疗器械产业全景调研及未来发展趋势预测报告
- 数控机床质量检验规定
- 信创基础知识培训课件
- (完整版)路面拆除施工方案
- 国家事业单位招聘2025中国工艺美术馆招聘拟聘人员笔试历年参考题库附带答案详解
- 2025年关于宗教干部教育整顿工作的自查报告
- 关于生命线的讲解
- 全国大学生职业规划大赛《机电一体化技术》专业生涯发展展示【高职(专科)】
- 绿色能源5万吨年生物质颗粒燃料生产线可行性研究报告
评论
0/150
提交评论