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

📄 c7db_receive.c

📁 unxi下共享内存的使用
💻 C
字号:
#include "./common/common.h"
#include "./common/sybfunc.c"
#include "./common/commonfunc.c"
struct	shmem	*shm_p;struct sockaddr_in 	rx_addr;			//inet recieve address struct for father and child1, child2 
int    			sockrxfd, socktxfd;  			//socket id for father and child1, child2int			logflag, dbgflag;char   	 		errtxt[1024];
char			sqlstr[1024],tempstr[100];
DBPROCESS 		*grs_svr;
RETCODE 		result_code;
LOGINREC      		*login;struct ne	*nePtr;long			msucounter;struct shmem* SetShm(struct shmem* shm_pTMP,char *KeyPath,char KeyId){	key_t	key;	int	shmid;		key	= ftok(KeyPath, KeyId);	printf("\nKEYID:%c,key:%d\n",KeyId,key);	shmid	= shmget(key, sizeof(struct shmem), IPC_CREAT|PERMS);	if(shmid < 0) {		printf("\n shmid < 0\n");		exit(1);	}	shm_pTMP = shmat(shmid, 0, 0);	if(shm_pTMP < 0) {		printf("\n shm_p < 0");		exit(-1);	}	memset(shm_pTMP, 0, sizeof(struct shmem));	return(shm_pTMP);}void release_shm(struct shmem* shm_pTMP,char *KEYPATH,char KEYID){	struct 	shmid_ds	shm_desc;	key_t			key;	int			shmid;	key	= ftok(KEYPATH, KEYID);	shmid	= shmget(key, sizeof(struct shmem), 0);	if(shmid < 0) {		perror("release_shm: shmid:");	}	if (shmdt(shm_pTMP) == -1){		perror("release_shm: shmdt:");	}		if (shmctl(shmid,IPC_RMID,&shm_desc) == -1){		perror("release_shm: shmctl:");	}}void house_keeper(int sig_num){	printf("\nClearing share memory and malloced memory.\n");	//free(nePtr);  //the pointer to struct ne,this is not a share memory	//if(grs_svr>0)db_disconnect(grs_svr);				release_shm(shm_p,"/usr/mbcp/",'e');	printf("\nNow exit safely.\n");	exit (0);}
main(int argc,char **argv)
{
	FILE*		fd;	unsigned char	buffer[MAXLINE];	int		retval,nenum;	unsigned char 	curtime[256];	int		i, j, k, m,l,n;	long		overflow,counter;	int		overflag,emptyflag,sqlflag,shmflag,shmflag_tmp;	time_t		tempt,ltime;	float		msucnt;	char		callingaddr[20],calledaddr[20],GRS_DB[50];	int		errflag;	FILE		*msufd;		signal(SIGINT, house_keeper);	logflag = 0;	dbgflag = 0;	nenum = 0;	bzero(tempstr,100);	if(argc==2){		strcpy(tempstr,argv[1]);		if(strcmp(tempstr,"debug")==0)			dbgflag=1;	}else if (argc!=2){		printf("\nusage:c7db_receive debug|free\n");			exit (0);	}	shm_p=SetShm(shm_p,"/usr/mbcp/",'e');	if((sockrxfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {		if(logflag) monitor(LOGFILE, "Can not create rxsocket", LOGNAME);		if(dbgflag) printf("\nCan not create rxsocket\n");		fflush(stdout);		exit(-1);       	}        bzero(&rx_addr, sizeof(rx_addr));	rx_addr.sin_family = AF_INET;	rx_addr.sin_addr.s_addr = htonl(INADDR_ANY);	rx_addr.sin_port = htons(6200);	if(bind(sockrxfd, (struct sockaddr *)&rx_addr, sizeof(rx_addr)) < 0) {		if(logflag) monitor(LOGFILE, "Can not bind rxsocket", LOGNAME);		if(dbgflag) printf("\nCan not bind rxsocket\n");		fflush(stdout);	     	exit(-1);	}	bzero(buffer,MAXLINE);	db_init();	msucounter = 0;		for(;;){    		bzero(buffer, MAXLINE);		shmflag = 0;		if(recvfrom(sockrxfd, buffer, MAXLINE, 0, (struct sockaddr *)0, (int *)0) < 0){			continue;		}		if (dbgflag) printf("\nbuffer:%s",buffer);		//if(strlen(buffer) > 300) continue;			msucounter ++;		i = gettoken(buffer,':');		//imsi		if(i<0) continue;		strncpy(shm_p->buffer[shm_p->wp].imsi, buffer, i);		shm_p->buffer[shm_p->wp].imsi[i] = 0;		strcpy(shm_p->buffer[shm_p->wp].ci, buffer+i+1);		shm_p->buffer[shm_p->wp].ci[4]=0;		if (dbgflag){			printf("\ndebug: a%sa\n",shm_p->buffer[shm_p->wp].ci);			fflush(stdout);			if(strcmp(shm_p->buffer[shm_p->wp].ci,"5011")==0){				printf("\ndumping 5011\n");				fflush(stdout);				monitor("/opt/5011dump.log", buffer, "msudump");			}		}		counter = shm_p->wp;		counter ++;		if(counter >= MAXSLOT) counter = 0;		if(counter != shm_p->rp) shm_p->wp = counter;	}	free(nePtr);}

⌨️ 快捷键说明

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