进程间通信Word下载.docx
- 文档编号:15907753
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:17
- 大小:20.37KB
进程间通信Word下载.docx
《进程间通信Word下载.docx》由会员分享,可在线阅读,更多相关《进程间通信Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
说明:
本系统调用产生一个新的进程,叫子进程,是调用进程的一个复制品.调用进程叫父进程,
子进程继承了父进程的几乎所有的属性:
.实际UID,GID和有效UID,GID.
.环境变量.
.附加GID.
.调用exec()时的关闭标志.
.UID设置模式比特位.
.GID设置模式比特位.
.进程组号.
.会话ID.
.控制终端.
.当前工作目录.
.根目录.
.文件创建掩码UMASK.
.文件长度限制ULIMIT.
.预定值,如优先级和任何其他的进程预定参数,根据种类不同决定是否可以继承.
.还有一些其它属性.
但子进程也有与父进程不同的属性:
.进程号,子进程号不同与任何一个活动的进程组号.
.父进程号.
.子进程继承父进程的文件描述符或流时,具有自己的一个拷贝并且与父进程和其它子进程共享该资源.
.子进程的用户时间和系统时间被初始化为0.
.子进程的超时时钟设置为0.
.子进程的信号处理函数指针组置为空.
.子进程不继承父进程的记录锁.
返回值:
调用成功则对子进程返回0,对父进程返回子进程号,这也是最方便的区分父子进程的方法.
若调用失败则返回-1给父进程,子进程不生成.
例子:
pid_tpid;
if((pid=fork())>
0){
/*父进程处理过程*/
}
elseif(pid==0){
/*子进程处理过程*/
exit(0);
/*注意子进程必须用exit()退出运行*/
else{
printf("
forkerror\n"
);
2,产生进程system调用例子:
产生一个新的进程,子进程执行指定的命令.
stdio.h>
stdlib.h>
intsystem(string)
char*string;
本调用将参数string传递给一个命令解释器(一般为sh)执行,即string被解释为一条命令,
由sh执行该命令.若参数string为一个空指针则为检查命令解释器是否存在.该命令可以同命令行命
令相同形式,但由于命令做为一个参数放在系统调用中,
应注意编译时对特殊意义字符的处理.命令的查找是按PATH环境变量的定义的.命令所生成的后果
一般不会对父进程造成影响.返回值:
当参数为空指针时,
只有当命令解释器有效时返回值为非零.若参数不为空指针,返回值为该命令的返回状态
(同waitpid())的返回值.
命令无效或语法错误则返回非零值,所执行的命令被终止.其他情况则返回-1.
例子1:
charcommand[81];
inti;
for(i=1;
i<
8;
i++){
sprintf(command,"
ps-ttty%02i"
i);
system(command);
例子2:
charbefehl[200];
/*stringbufferforcshcommand*/
char*runserver="
hosts1"
;
/*servername*/
shortshift_act_l;
/*currectshiftnumber*/
charshift_act_c[1];
charshift_beg[20];
/*shiftbegin*/
charshift_end[20];
/*shiftend*/
....
T_report_p->
shift_no='
0'
memcpy(T_report_p->
time_from,"
yyyy-mm-dd
hh:
mi:
ss"
sizeof(T_report_p->
time_from));
time_to,"
yyyy-mm-ddhh:
time_to));
memset(befehl,'
\0'
sizeof(befehl));
sprintf(befehl,"
rsh%s%sprot.sh'
%s%s%c\"
%19.19s\"
\"
%9.9s\"
&
"
runserver,
REPORT_RSH_PATH,
PROD_LOG,
DRUCKER_NAME_1,
shift_no,
time_from,
time_to,
coil_id);
system(befehl);
3,产生进程exec()调用例子:
exec()
执行一个文件
intexecl(path,arg0,...,argn,(char*)0)
char*path,*arg0,...,*argn;
intexecv(path,argv)
char*path,*argv[];
intexecle(path,arg0,...,argn,(char*)0,envp)
char*path,*arg0,...,*argn,*envp[];
intexecve(path,argv,envp)
char*path,*argv[],*envp[];
intexecvp(file,argv)
char*file,*argv[];
这是一个系统调用族,用于将一个新的程序调入本进程所占的内存,并覆盖之,产生新的
内存进程映象.
新的程序可以是可执行文件或SHELL批命令.当C程序被执行时,是如下调用的:
main(intargc,char*argv[],char*envp[]);
argc是参数个数,是各个参数字符串指针数组,envp是新进程的环境变量字符串的指针数组.argc至
少为1,argv[0]为程序文件名,所以,在上面的exec系统调用族中,path为新进程文件的路径名,
file为新进程文件名,若file不是全路径名,系统调用会按PATH环境变量自动找对应的可执行文件
运行.若新进程文件不是一个可执行的目标文件(如批处理文件),则execlp()和execvp()会将该文
件内容作为一个命令解释器的标准输入形成system().arg0,...等指针指向'
结束的字符串,组成
新进程的有效参数,且该参数列表以一个空指针结束.反过来,arg0至少必须存在并指向新进程文件
名或路径名.同样,argv是字符串指针数组,argv[0]指向新进程文件名或路径名,并以一空指针结束.
envp是一个字符串指针数组,以空指针结束,这些字符串组成新进程的环境.在调用这些系统调用前
打开的文件指针对新进程来说也是打开的,除非它已定义了close-on-exec标志.打开的文件指针在
新进程中保持不变,所有相关的文件锁也被保留.调用进程设置并正被捕俘的信号在新进程中被恢复
为缺省设置,其它的则保持不变.新进程启动时按文件的SUID和SGID设置定义文件的UID和GID为有效
UID和GID.新进程还继承了如下属性:
.进程号.
.会话号.
.alarm时钟信号剩下的时间.
.文件创建掩码.
.资源限制.
.用户时间,系统时间,子进程用户时间,子进程系统时间.
.记录锁.
.进程信号掩码.
.信号屏蔽.
.优先级.
.预定值.
调用成功后,系统调用修改新进程文件的最新访问时间.返回值:
该系统调用一般不会有成功返回值,
因为原来的进程已荡然无存.
nowthisprocesswillbepscommand\n"
execl("
/bin/ps"
"
ps"
-ef"
NULL);
二、进程通讯编程
1,Messagequeue队列编程例子
/*****************************************************************************
Excerptfrom"
LinuxProgrammer'
sGuide-Chapter6"
(C)opyright1994-1995,ScottBurkett
*****************************************************************************
MODULE:
msgtool.c
AcommandlinetoolfortinkeringwithSysVstyleMessageQueues
*****************************************************************************/
ctype.h>
sys/ipc.h>
sys/msg.h>
#defineMAX_SEND_SIZE80
structmymsgbuf{
longmtype;
charmtext[MAX_SEND_SIZE];
};
voidsend_message(intqid,structmymsgbuf*qbuf,longtype,char*text);
voidread_message(intqid,structmymsgbuf*qbuf,longtype);
voidremove_queue(intqid);
voidchange_queue_mode(intqid,char*mode);
voidusage(void);
intmain(intargc,char*argv[])
{
key_tkey;
intmsgqueue_id;
structmymsgbufqbuf;
if(argc==1)
usage();
/*Createun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 通信