- 199
- 0
- 约4.22千字
- 约 25页
- 2017-08-22 发布于天津
- 举报
第七章UNIX进程的通信pps.ppt
* * 第七章 UNIX进程的通信 7.1 进程通信基本概念 进程通信包括控制信息传递和大批量信息传递. 1. 通信方式 1) 主从式-----通信进程间有主从之分 2) 会话式-----用请求/服务方式完成通信 3) 消息或邮箱机制-----通过消息缓冲或邮箱完成通信 4) 共享存储区通信-----通过共享缓冲区通信 2. Unix中进程通信 包括三种: .基本通信——用于传递进程间的控制信息; .管道通信——将管道文件作为通信的介质,传递进程间的信息; .IPC(Inter Process Commuation)通信——用于进程间大量的数据传送。 7.2 UNIX基本通信 1. 锁文件通信 通信进程双方作一个约定,在某个指定目录中(通常会是/tmp目录)查找是否有一个双方约定好的锁文件存在,存在时完成一种处理,不存在时完成另一种操作。 例如:两进程P1和P2试图访问一个不能同时进入的临界资源时: P1查询锁文件是否存在,若不存在P1创建锁文件lock_file,然后使用该资源; 使用完后释放该资源并删除lock_file; 如锁文件存在P1等待一个时间再进行锁文件的查询。 P2也执行与P1相似的动作达到对共享临界资源的访问。 2. 记录锁定文件通信 通过对记录的锁定实现通信,用UNIX中已有的一个加锁程序实现。 建议型锁定-----文件记录可被锁定,访问时判锁定的位置,决定是否能访问。 强制型锁定-----确定一个锁协议,对文件做每一个read及write系统调用时检测锁信息,满足时访问,否则不能访问。 通过系统调用fcntl及库函数lockf完成文件中记录的锁定。 3. 信号通信 信号是进程中异步发生事件的提示信息,用信号实现: 我已完成了什么,等待你完成什么,或现在可做什么。 UNIX进程通信可使用的信号已做了预先的内部说明,用户使用时只须根据这些信号的约定完成进程间的信息。 用命令: %man –s5 signal 或在头文件sys/signal.h中 可以查到UNIX中描述的信号说明 软中 断号 符号名 功 能 1 SIGHUP远程 电话挂断 2 SIGINT 输入DELETE 3 SIGQUIT 输入QUIT 4 SIGILL 非法指令 5 SIGTRAP 断电/跟踪 6 SIGIOT IOT指令 7 SIGEMT EMT指令 8 SIGFPE 浮点溢出 9 SIGKILL 强行终止进程 10 SIGBUS 总线超时 11 SIGSEGV 段违例 12 SIGSYS 系统调用错 13 SIGPIPE PIPE文件只有写而无读者 14 SIGALRM 报警信号 15 SIGTERM 终止信号(终止) 1)信号的发送 Unix使用系统调用kill发送信号。此系统调用说明在signal.h中.调用格式为: status=kill(pid,sig); 其中: pid --- 用于指明信号将发往哪个进程 sig --- 是指定欲发送信号的类型(可以是软中断号或中断名称)例: 在程序中写: kill(96,9);或 kill(96,sigkill); 使用命令: % kill[-sig] pid 4. 使用信号完成通信 通信中可以用软中断方式完成信号的传递。 2)信号的接受与处理 Unix使用系统调用signal接受一种指定的 信号,并指定对其的处理方法。 #include signal.h int sig, func( ), *funcp( ); …... funcp=signal(sig,func( )); …… 其中:func( )是进程接收信号后执行函数,此位可取值为: 1)SIG-IGN: 忽略所接收信号 2)SIG-DFL: 恢复对信号的缺省处理 3)函数名: 以整数地址形式表示地址 /* test_signal.c */ #includesignal.h main() { void catchint( ); int i; signal(SIGINT,catchint( )); for(i=1;i5;i++) {printf(“sleep call # %d \n”,i); sleep(1);} printf(“Exiting.\n”); exit(0); } void catchint(signo) int signo; { /*signal(SIGINT,SIG_IGN);*/ printf(“\n CATCHINT;signo=%d;”,signo); printf(“C
原创力文档

文档评论(0)