static void signalsetup(void) { struct vt_mode vtm; vtm.mode = VT_PROCESS; vtm.waitv = 0; vtm.relsig = SIGUSR1; vtm.acqsig = SIGUSR2; vtm.frsig = 0; signalregister(); ioctl(0, VT_SETMODE, &vtm); }
static void signalreceived(int n) { if (exitit) return; /* racy, new signals may arrive before re-registeration */ signalregister(); switch (n) { case SIGUSR1: hidden = 1; switchterm(cterm(), cterm(), 0, 1, 0); ioctl(0, VT_RELDISP, 1); break; case SIGUSR2: hidden = 0; fb_cmap(); switchterm(cterm(), cterm(), 1, 0, 1); break; case SIGCHLD: while (waitpid(-1, NULL, WNOHANG) > 0) ; break; } }
int main(int argc, char *argv[]) { FD_ZERO(&readset) ; popenFunc(); //incoming connections keyboardFunc(); pipeFunc();t fifoFunc(); signalregister(); struct sockaddr_in sAddr; int sfd; int nsfd; char buffer[25]; int result; int nread; int x; int val; sfd = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP); val = 1; result = setsockopt(sfd,SOL_SOCKET, SO_REUSEADDR, &val,sizeof(val)); if (result < 0) { perror("server1"); return 0; } sAddr.sin_family = AF_INET; sAddr.sin_port = htons(8898); sAddr.sin_addr.s_addr = INADDR_ANY; result = bind(sfd, (struct sockaddr*) &sAddr, sizeof(sAddr)); if (result < 0) { perror("server1"); return 0; } result = listen(sfd, 5); if (result < 0) { perror("server1"); return 0; } FD_SET(sfd, &readset); while (1) { testset = readset; result = select(FD_SETSIZE, &testset,NULL, NULL, NULL); if (result < 1) { perror("server1"); return 0; } for (x = 0; x < FD_SETSIZE; x++) { if (FD_ISSET(x, &testset)) { if (x == sfd) { nsfd = accept(sfd, NULL,NULL); FD_SET(nsfd, &readset); } else if(x==0 || x==pnrfd ||x==ffd || x==popenfd) { nread=read(0,buffer,sizeof(buffer)); if(nread<=0) { nread=read(pfd,buffer,sizeof(buffer)); if(nread<=0) { nread=read(ffd,buffer,sizeof(buffer)); if(nread<=0) { nread=read(popenfd,buffer,sizeof(buffer)); } } } for(i=0;i<nsfd_count;i++) { send(nsfdarr[i],buffer,sizeof(buffer)); } } else { nread = recv(x, buffer, 25, 0); if (nread <= 0) { close(x); FD_CLR(x, &readset); printf("client on descriptor #%i disconnected\n", x); } else { buffer[nread] = '\0'; printf("%s\n", buffer); send(x, buffer, nread, 0); } } } } } }