📄 tools.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 + -