进程间通讯---信号量练习(二)
来源:互联网 发布:腾讯体育软件 编辑:程序博客网 时间:2024/06/06 00:03
练习:
A, B 两个进程,首先,A 进程获取用户输入,当 A 进程获取的用户输入是“OK”
时, B 进程输出 100 以内所有的素数。
sem.h:
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<assert.h>#include<string.h>#include<sys/sem.h>union semun{ int val;}void sem_get(){ semid = semget((key_t)1234,0,0666); if(semid == -1) { semid=semget((key_t)1234,1,0666| IC_CREAT); if(semid == -1) { exit(0); } union semun v; v.val = 0; semctl(semid,0,SETVAL,v); }}void sem_p(){ struct sembuf op; op.sem_num = 0; //要操作的信号量编号 op.sem_op = -1; op.sem_flg = SEM_UNDO; semop(semid,&op,1);}void sem_v(){ struct sembuf op; op.sem_num = 0; op.sem_op = 1; op.sem_flg = SEM_UNDO; // semop(semid,&op,1);}void sem_del(){ semctl(semid,0,IPC_RMID); //用于删除一个已经无需继续使用的信号量}
A进程:
void main(){ sem_get(); while(1) { printf("please input:"); char p[128]={0}; fgets(p,127,stdin); if (strncmp (p,"ok",2) == 0) { sem_v(); } if(strncmp(p,"end",3)== 0) { break; } } printf("write success\n");}
B进程:
#include"sem.h"#include<sys/sem.h>void main(){ sem_get(); sem_p(); int i=2; for(;i<=100;i++) { int j=1; int count =0; for(;j<=i;j++) { if(i%j == 0 ) { count ++; } } if(count == 2) { printf("%d ",i); } } printf("\n");}
阅读全文
0 0
- 进程间通讯---信号量练习(二)
- 进程间通讯(二)信号量
- 进程间通讯(二) 无名管道 & 信号量
- 进程间通讯:信号量
- 进程间通讯--信号量
- 进程间通讯之信号量(实例)
- linux 进程间通讯--信号量
- linux_c 开发(5-6)进程间通讯_信号量
- linux-进程间通讯(信号量,共享内存)
- 进程间通讯 (3)-信号量相关函数
- 进程间通讯——信号量(一)
- 进程间通讯(3)—信号量&管道
- 进程间通信(二)----信号量
- 进程间通信方式(二)信号量
- 进程间的通信---(二)信号量
- Linux进程间通讯之信号量
- Linux进程间通讯之信号量sem
- 进程间通讯——信号量
- VirtualBox 复制虚拟机网络连接失败
- 25、C#里面TextBox编辑框的使用
- Docker中运行consul集群
- java创建文件和目录
- LVS原理
- 进程间通讯---信号量练习(二)
- 流程控制和函数
- Android调用不符合JNI命名规范的so库
- C/C++中的整数和浮点数在计算机中是如何表示的?
- 171012_学习Jeebase笔记
- void和void *
- GDAL获取影像中心波长和单位
- PyCharmMac键盘符
- (32位汇编 一)十六进制加法表