|

楼主 |
发表于 2003-12-12 10:04:01
|
显示全部楼层
- #include "unp.h"
- #include <sys/param.h>
- #define PORT 1983
- main()
- {
- start_daemon();
- int i,maxi,maxfd,listenfd,connfd,sockfd;
- int clilen;
- struct sockaddr_in cliaddr,servaddr;
- listenfd=socket(AF_INET,SOCK_STREAM,0);
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family=AF_INET;
- servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
- servaddr.sin_port=htons(PORT);
- bind(listenfd,(SA *)&servaddr,sizeof(servaddr));
- listen(listenfd,5);
- while(1)
- {
- connfd=accept(listenfd,(SA *)&cliaddr,&clilen);
- if(fork()==0)
- {
- close(listenfd);
- server(connfd);
- exit(0);
- }
- close(connfd);
- }
- }
- int server(int sockfd)
- {
- char recvline[1024];
- char sendmes[4096];
- FILE *fd;
- read(sockfd,recvline,1024);
- if(strncmp(recvline,"fortune",7)==0)
- {
- fd=popen("fortune","r");
- fread(sendmes,sizeof(char),4096/*sizeof(sendmes)*/,fd);
- // read(fileno(fd),sendmes,sizeof(sendmes));
- write(sockfd,sendmes,strlen(sendmes));
- pclose(fd);
- close(sockfd);
- //执行FORTUNE
- return 1;
- }
- else if(strncmp(recvline,"zhfortune",9)==0)
- {
- fd=popen("fortune-zh","r");
- fread(sendmes,sizeof(char),4096/*sizeof(sendmes)*/,fd);
- // read(fd,sendmes,sizeof(sendmes));
- write(sockfd,sendmes,strlen(sendmes));
- pclose(fd);
- close(sockfd);
- //执行fortune-zh
- return 2;
- }
- close(sockfd);
- return -1;
- }
- start_daemon()
- {
- int i,fd;
- for(i=0;i<NOFILE;++i)
- close(i);
- if((fd=open("/dev/tty",O_RDWR))>0)
- {
- ioctl(fd,ENOTTY,0);
- close(fd);
- }
- if(fork())
- exit(0);
-
- setsid();
- chdir("/tmp");
- umask(0);
- signal(SIGCHLD,SIG_IGN);
- }
复制代码 |
|