UNIX操作系统中进程通信机制的应用Windows系统 电脑资料_第1页
UNIX操作系统中进程通信机制的应用Windows系统 电脑资料_第2页
UNIX操作系统中进程通信机制的应用Windows系统 电脑资料_第3页
UNIX操作系统中进程通信机制的应用Windows系统 电脑资料_第4页
UNIX操作系统中进程通信机制的应用Windows系统 电脑资料_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UNIX操作系统中进程通信机制的应用Windows系统 电脑资料 UNIX操作系统中进程通信机制的应用 UNIX系统具有丰富的进程通信手段,其中包括信号、信号灯、管道、消息传递等,这些进程通信机制能有效地完成多个进程之间的信息共享和数据交换,从而保证进程间的协同工作,本文给出了利用信号和信号灯完成特定工作的两个实 UNIX操作系统中进程通信机制的应用 UNIX系统具有丰富的进程通信手段,其中包括信号、信号灯、管道、消息传递等,这些进程通信机制能有效地完成多个进程之间的信息共享和数据交换,从而保证进程间的协同工作,本文给出了利用信号和信号灯完成特定工作的两个实例, 一、信号灯互斥功能的应用 在多用户操作系统中,信号灯是防止两个或多个进程同时访问共享资源的一种机制。在铁路系统中信号灯可防止两列火车在同一轨道上相撞在计算机系统中,信号灯能保证访问共享资源不会发生混乱。互斥操作要求任何时刻只能有一个或一类进程访问信号灯(执行一个特定的代码区域)。 互斥的应用非常广泛,UNIX操作系统提供了多种用户对共享资源的访问方法;多用户数据库管理系统为保证数据的完整性提供了加锁和解锁功能。另外在设计管理信息系统时经常要进行汇总处理,此时需要加入完全互斥功能;在设计操作员管理程序时,有时要求同一时刻只允许每个操作岫次,这就要求具有部分互斥功能。 下面的TEST.C程序程序说明了利用信号灯实现互斥的方法,其中函数Initsem()根据互斥条件确定是否进入互斥临界区,在需进入完全互斥时,只需将KEY 为某个常量即可。 test c # include # include main (argc,argv) int argc; char * argv int semid; if ( (semid=initsem(operate-ID) P (semid) ; /*临界区*/ V (semid) ; initsem(op) char * op; int id,status=0,semid; key-t Key ,ftok() id=atoi(op); key=ftok(getenv(HOME),id);/*相同Key值互斥*/ if (semid=semget(key,1,SEMPERMIPC-CREATIPC-EXCL)=-1) if (errno=EEXIST) semid=semget(key,1,0); else/*if created.*/ status=semct1(semid,0,SETVAL,1); if(semid=-1status=-1) perror(initsem failed) return(-1); else return(semid);/*all okay*/ P (semid) int semid; struct sembufp-buf; p-buf.sem-num=0; p-buf.sem-op=-1; p-buf.sem-flg=IPC-NOWAIT; if (semop (semid, & p-buf,1)=-1) perror (p (semid) falsed); exit (1); else return (0); V (semid) int semid; struct sembufv-buf, v-buf.sem-num=0; v-buf.sem-op=1; v-buf.sem-flg=IPC-NOWAIT; if (semop (semid, &v-buf,1)=-1) perror ( v (semid) failed); exit (1); else return (0) #include #include extern int errno; #define SEMPERM 0600 #define TRUE1 #define FALSE 0 二、用信号实现打印进程的控制 在大多数应用程序中,都包含打印模块,以实现报表、文本等信息的打印, C程序员常用fprint (fp,)来设计打印程序,打印流程不能中断, C语言中的标准函数signal(sig,func)可实现软中断,其功能为:当接收到信呈sig时,程序转去执行函数func,func返回后,程序从中断处继续执行重复使用中断需重新调用signal函数,另外一对标准函数setjmp(pos)和longimp(pos,arg) 可是实现远程跳转,setjmp(pos)能把控制传回被保存的位置,其中变量arg 作为setjmp()的返回值。 根据以上所述,笔者编写了下列打印程序,使用户在打印过程中遇到异常情况需要处理时,可以按DEL键中断打印,程序转而执行PRSTOP函数,通过输入某种条件,决定从中断处继续打印或远程跳转以完成退出打印或重新打印等功能。 #include #include #include jmp-buf pos; /*保存堆栈环境*/ main() FILE * fp; int i,n,c,prstop(); fp=fopen(/dev/lp0,w); c=setjmp(pos); /*跳转位置*/ if(c=1)exit(0); signal(SIGINT,prstop); printf(按DEL键可暂停打印n);/*DOS下用CTRL-C键*/ i=0; n=30; while(i+ /*打印报表*/ fprintf(fp,LINE %d TEST TEST TEST TEST n,i); fclose(fp); exit(0); prstop(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论