- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
英语全新版大学第二版第四册第二单元
实 例 #include stdio.h #include unistd.h #include sys/types.h #includesys/wait.h #includestdlib.h #includesignal.h pid_t pid1,pid2; void sig_kill() { if(kill(pid1,SIGTERM)==-1) //用SIGKILL信号也可以 printf(“kill child1 error!”); if((kill(pid2,SIGTERM)==-1) printf(“kill child2 error!”); } 实 例 main() { int status; if((pid1=fork())0) { printf(“error!\n”); exit(0); } else if(pid1==0) printf(“This is child1 process !\n”); else { if((pid2=fork())0) { printf(“error!\n”); exit(0); } else if (pid2==0) printf(“This is child2 process !\n”); else { printf(“This is parent process !\n”); if(signal(SIGINT,sig_kill)==SIG_ERR) printf(“error!”); sleep(10); if(wait(status)==pid1) printf(“Child Process1 is Killed by Parent!\n”); if(wait(status)==pid2) printf(“Child Process2 is Killed by Parent!\n”); printf(“parent process is exited!\n”); exit(0);} } } 4.7 UNIX进程通信 二、管道通信 1. 管道 连接读写进程,用于进程通信的共享文件。 2.管道的类型 (1)无名管道 (2)有名管道 3.无名管道的建立 int pipe(int fdes[2]) 4.管道的读写 实 例 #include unistd.hmain(){int filedes[2];char buffer[80];pipe(filedes);if(fork()0){/* 父进程*/char s[ ] = “hello!”;write(filedes[1],s,sizeof(s));}else{/*子进程*/read(filedes[0],buffer,80);printf(“%s”,buffer);}} 运行结果:hello! 4.7 UNIX进程通信 三、Unix system V IPC机制 1. 消息队列 (1)消息队列的建立: int msgget(key,msgflg) (2)消息的发送和接收: msgsnd(msgqid,msgp,msgsz,msgflg) msgrcv( msgqid,msgp,msgsz,msgflg,msgtyp) (3)消息队列的控制 int msgctl(msgqid,cmd,buf) 4.7 UNIX进程通信 2. 共享存储区(SHM) (1)共享存储区的建立和控制 shmget(key,size,flag) shmctl(shmid,cmd,buf) (2)共享存储区的附接和断开 shmat(shmid,addr,flag) shmdt(addr) 4.7 UNIX进程通信 3.信号量集机制 (1)信号量集的建立 semget(key,nsems,semflg) (2)信号量集的控制 semop(semid,sops,nsops) 其中sops是指向信号量操作数组的指针 操作数组元素定义为: struct sembuf{ short sem_num;
文档评论(0)