信号量有关函数的封装
来源:互联网 发布:非农数据对原油的影响 编辑:程序博客网 时间:2024/05/23 19:13
基于上一篇《信号量通信》,完成有关函数的封装。
sem.h
#ifndef _SEM_H #define _SEM_H #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<assert.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h> int semid; union semun { int val; }; void sem_get();//获取或创建,如果是创建初始化 void sem_p();//p操作 void sem_v();//v操作 void sem_del();//删除 #endifsem.c
#include"sem.h" void sem_get() { semid = semget((key_t)512,1,0664);//直接获取 if(semid == -1)//如果获取不到则创建 { semget((key_t)512,1,0664|IPC_CREAT); assert(semid != -1); union semun v; v.val = 0; if(semctl(semid,0,SETVAL,v) == -1)//初始化 { perror("semctl error\n"); exit(0); } } } void sem_p() { struct sembuf buf; buf.sem_num = 0; buf.sem_op = -1; buf.sem_flg = SEM_UNDO; if(semop(semid,&buf,1) == -1) { perror("p error\n"); exit(0); } } void sem_v() { struct sembuf buf; buf.sem_num = 0; buf.sem_op = 1; buf.sem_flg = SEM_UNDO; if(semop(semid,&buf,1) == -1) { perror("v error\n"); exit(0); } } void sem_del() { if(semctl(semid,0,IPC_RMID) == -1) { perror("del error\n"); exit(0); } }
利用信号量完成A进程获取用户输入,输入“ok”后,B进程输出100以内的素数。
testa.c
#include"sem.h" int main() { sem_get(); while(1) { printf("please input:"); fflush(stdout); char buff[128] = {0}; fgets(buff,128,stdin); buff[strlen(buff)-1] = 0; if(strncmp(buff,"ok",2) == 0) { sem_v(); exit(0); } } }
testb.c
#include"sem.h" int Isprimer(int n) { int i = 2; for(;i<n;i++) { if(n%i == 0) { return 0; } } return 1; } int main() { sem_get(); sem_p(); int i; for(i=0;i<=100;i++) { if(Isprimer(i)) { printf("%d is primer\n",i); } } sem_del(); }
结果如下:
阅读全文
0 0
- 信号量有关函数的封装
- 信号量函数的封装
- linux中与 信号量有关的函数
- linux中与信号量有关的函数
- 信号量处理有关的函数和数据结构
- 有关信号量的讨论
- linux网络编程之System V 信号量(一):封装一个信号量集操作函数的工具
- linux网络编程之System V 信号量(一):封装一个信号量集操作函数的工具
- Linux中与信号量有关的函数调用 semget, semop, semctl
- 信号量的实现函数
- 信号量函数的实现
- 信号量 sem_timedwait 函数的使用
- 有关爱情的函数;)
- 有关Mat的函数
- POWER_SAVING有关的函数
- 数学有关的函数
- 有关线程的函数
- 数组有关的函数
- 哲学和科学
- 回顾超链接
- 不仅仅是没有技术
- Java简单剪刀石头布问题
- linux基础(一)
- 信号量有关函数的封装
- 1116. Come on! Let's C (20)
- Python基础(三)
- maven安装和创建项目
- 竖着的Tablayout
- java和C++之单例类双重检查加锁
- apache 配置虚拟目录访问和域名访问的两种方式
- 打Android包的密钥库文件
- Java剪刀石头布随机次数版