linux多进程编程(一).pdf

linux多进程编程(一).pdf

ID:51496610

大小:1.37 MB

页数:7页

时间:2020-03-25

linux多进程编程(一).pdf_第1页
linux多进程编程(一).pdf_第2页
linux多进程编程(一).pdf_第3页
linux多进程编程(一).pdf_第4页
linux多进程编程(一).pdf_第5页
资源描述:

《linux多进程编程(一).pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、最近因为一个偶然的原因要在linux平台上做一个模拟实验,其中要涉及到多进程的编程,所以特此写一系列的博客来总结一下多进程的编程问题。这一系列文章只适合了解linux,并且在Linux下使用C语言写过程序的人。首先进程的概念就不多说了,所有大凡上过操作系统课的人一定对那一堆堆的图示永生难忘。使用进程前,了解一个简单的linux命令“ps”命令,它用来显示当前系统进程:ps效果:psef效果:psax效果:此外还有psl,nice,renice命令及参数,具体的使用用man查询就可以了一.启动一个新进程:#inlcude

2、system(char*);这个函数可以执行一个新的shell命令,只是启动的新进程将会取代当前进程,也即如果system启动成功,则其之后的代码将不会被运行。下面是一个system的例子:1#include?2#include34voidmain(){5intresult_code;6printf("Runningpswithsystem");7result_code=system("psax&");8if(result_code==127){printf

3、("can'tstartashell");}9if(result_code==1){printf("starterror");}10else{printf("runningsuccess");}11}运行效果如图所示:二.exec系列函数#includechar**environ;intexecl(constchar*path,constchar*arg0,...,(char*)0);intexeclp(constchar*file,constchar*arg0,...,(char*)0);inte

4、xecle(constchar*path,constchar*arg0,...,(char*)0,char*constenvp[]);intexecv(constchar*path,char*constargv[]);intexecvp(constchar*file,char*constargv[]);intexecve(constchar*path,char*constargv[],char*constenvp[]);exec系列函数的作用是替换进程的映像,并且其会接受当前进程的所有资源,包括已经打开的文件句柄等等。

5、这一系列函数可以分为两大类,包括以l系列,其接受一个指令路径或者目录,以可变参数,或者一个环境变量参数变,但所有参数均需以空指针结尾;第二个系列是v系列,与l系列类似,只是其将可变参数变以数组的形式传递给函数一个exec的示例:1#include?2#include3#include45voidmain(){6printf("execseriesfunctionstest");7printf("execve");89char*constps_argv[]

6、={"ps","ax",0};10char*constps_envp[]={"PATH=/bin:/usr/bin","TERM=console",0};1112execv("/bin/ps",ps_argv);13printf("Done.");运行效果如图:输入输出重定向:因为exec执行后会保留之前进程的已打开文件句柄,利用这个特性,我们可以写一个小的程序,这种思想是你可以包装一个你根本就不知道源代码,只知道功能的程序。比如下面这个upper.c将文件改为大写输出,useupper.c包装它,并为它提供一个文

7、件名参数1#include?2#include3#include45intmain(){6intch;7while((ch=getchar())!=EOF){8putchar(toupper(ch));9}10exit(0);11}1#include?2#include3#include45intmain(intargc,char*argv[]){6char*filename;78if(argc!=2){9

8、perror("argumentsnumberlessthan2");10exit(1);11}1213filename=argv[1];1415if(!freopen(filename,"r",stdin)){16perror("filereopenfailed");17exit(2);18}1920execl("./u

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。