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