⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tools.c

📁 多用户银行系统
💻 C
字号:
#include <stddef.h>#include <signal.h>#include <sys/types.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/ipc.h>#include <fcntl.h>#include <unistd.h>#include <sys/sem.h>#include <time.h>#include <errno.h>#include "../include/structs.h"#include "../include/stddef.h"//int semflag = 0;int getSHM(){		SHM *shm;	int shmid;	int semid;	int index;	key_t semkey;	struct sembuf semwait,semsignal;	void init_semaphore_struct(struct sembuf *sem,int semnum,int semop,int semflg)	{		sem->sem_num = semnum;		sem->sem_op = semop;		sem->sem_flg = semflg;	}	init_semaphore_struct(&semwait,0,-1,0);	init_semaphore_struct(&semsignal,0,1,0);	      	semkey = ftok("/home/lastbank/src/",'a');	if((semid = semget(semkey,1,IPC_EXCL|IPC_CREAT))==-1)	{		semop(semid,&semwait,1);		printf("getSHM have locked\n");	}else{		semid = semget(semkey,1,IPC_CREAT);		//semop(semid,&semwait,1);		printf("getSHM have locked\n");	}	//init_semaphore_struct(&semwait,0,-1,0);	//init_semaphore_struct(&semsignal,0,1,0);	//if(semflag==0)	//{	//	semop(semid,&semsignal,1);	//	printf("SHM have locked\n");	//	semflag = 1;	//}	//semop(semid,&semwait,1);			shmid = shmget(KEY , SHM_SIZE , 0600);	shm = shmat(shmid , 0 , 0);	/********************/	/*   time window    */	/********************/	for(index = 0;index < MAX_CLIENT;index ++){		if( (shm->swap_arr)[index].flag == 0){			shm->flag = 0;			(shm->swap_arr)[index].flag = 1;			shmdt(shm);			semop(semid ,&semsignal,1);			printf("getSHM have unlocked\n");			return index;			}		}	shmdt(shm);	semop(semid,&semsignal,1);	printf("getSHM have unlocked\n");	return -2;		};int freeSHM(int index){	SHM *shm;	int shmid;		//shmid = shmget(KEY , 0 , 0);	//key_t key;	//key = ftok("/root/test.c" , 0);	shmid = shmget(KEY , SHM_SIZE , 0600);	shm = shmat(shmid , 0 , 0);	(shm->swap_arr)[index].flag = 0;		shmdt(shm);	return 0;			};/*int getSHM(){	void *p;        void *tmp;	key_t key;	int shmid;	key = KEY;	shmid = shmget(key , 0 , 0);	//p = shmat(shmid , NULL , 0);	p = shmat(shmid , NULL , SHM_W|SHM_R);	tmp = p;	printf("int getSHM(), SHM's head address : %p\n" , p);		if( *((int *)p) != 0)return -1;	*(int *)tmp = 1;	p += sizeof(int);	while(1){		if(p - tmp >= SHM_SIZE){			*(int *)tmp = 0;			return -1;		}if(*((int *)p) == 0){			*((int *)p) = 1;			p += sizeof(int);			printf("address of p : %p 	in getSHM()...\n" , p);			*(int *)tmp = 0;			return p - tmp;		}if(*((int*)p) == 1){			p += sizeof(int);			p += sizeof(SHM);			continue;		}	}};int freeSHM(void *p){	printf("in freeSHM() , p is : %p\n" , p);	p -= sizeof(int);	printf("in freeSHM() , p is : %p\n" , p);	*(int *)p = 0;	return OK;};*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -