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

📄 server.c

📁 多用户银行系统
💻 C
字号:
#include <stddef.h>#include <signal.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <unistd.h>#include <string.h>#include <stdio.h>#include "../include/structs.h"#include "../include/stddef.h"#include "../include/tools.h"#include "../include/serverlib.h"#define SHM_MODE (SHM_R | SHM_W) void alloc_buss(int,siginfo_t*,void*);void buss(int);pid_t savepid;pid_t transpid;USER *user;SHM *shm;int main(int argc , char **argv){		int shmid;				pid_t pid;	pid_t serv_pid;		freopen(LOGFILE , "w" , stdout);	if(pid = fork() != 0){		printf("main process exit...\n");		exit(1);		}		if(setsid() < 0){		printf("new session error !\n");		exit(1);		}	if(pid = fork() != 0){		printf("sub process exit....\n");		printf("father's getgid() : %d\n" , getgid());		sleep(10);		exit(1);		}	/*************************   DEAMON   **************************/	printf("daemon's getgid() : %d\n" , getgid());	signal(SIGCHLD,SIG_IGN);	signal(SIGTTOU,SIG_IGN);	signal(SIGTTIN,SIG_IGN); 	signal(SIGTSTP,SIG_IGN);	signal(SIGHUP ,SIG_IGN);		struct sigaction act;	act.sa_flags=SA_SIGINFO;	act.sa_sigaction=alloc_buss;	if(sigaction(SIGRQST,&act,NULL)<0)		printf("sigaction wrong\n");		close(0);		close(1);		close(2);	if(    (  shmid = shmget(KEY , SHM_SIZE , 0600|IPC_CREAT)  ) == -1    ){		printf("SHM create error !\n");		exit(1);		}	// inital to 0	if( (shm = shmat(shmid , NULL , 0) ) == NULL){		shmctl(shmid , IPC_RMID , NULL);		exit(1);	}	memset(shm , 0 , SHM_SIZE);	shm->flag = 0;	int index;	for(index = 0;index < MAX_CLIENT;index ++){		(shm->swap_arr)[index].swap.spid = getpid();	}	shmdt(shm);	while(1){		pause();		}};void alloc_buss(int signum,siginfo_t *info,void *myact){	if(fork()==0){		buss(info->si_int);		exit(1);		}else{		return;	}};void buss(int index){	SHM *shm;		int shmid;		shmid = shmget(KEY , SHM_SIZE , 0600);	shm = (SHM *)shmat(shmid , NULL , 0);	if( strcmp( (shm->swap_arr)[index].swap.mark , "changepwd") == 0){		changepwd(index);		}	if( strcmp( (shm->swap_arr)[index].swap.mark , "transfer") == 0){		trans(index);		}	if( strcmp( (shm->swap_arr)[index].swap.mark , "withdraw") == 0){		draw(index);	}	if( strcmp( (shm->swap_arr)[index].swap.mark , "save") == 0){		save(index);	}	if( strcmp( (shm->swap_arr)[index].swap.mark , "add") == 0){		adduser(index);	}if( strcmp( (shm->swap_arr)[index].swap.mark , "query") == 0){		query(index);	}	shmdt(shm);	//kill((shm->swap_arr)[index].swap.cpid,SIGRSPN);	(shm->swap_arr)[index].swap.over = 1;	exit(1);};

⌨️ 快捷键说明

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