📄 main.c
字号:
#include "sock.h"
#include "demon.h"
#include "explaincmd.h"
#include <sys/wait.h>
#include <crypt.h>
int islogin=0;
int pid=0;
void main(int argc, char **argv)
{
/*else if(strcmp(argv[1],"restart")==0)
{
int flag=0;
flag=kill(pid,SIGTERM);
if(flag==0)
puts("Service myftp stop [OK]");
else
puts("Service myftp stop [FAILED]");
pid=(int)getpid();
puts("Service myftp start [OK]");
}*/
int listen_sock=-5,data_sock=0,cmd_sock=0;
struct sockaddr_in listen_addr,data_addr,cmd_addr;
int len;
int pid;
FILE *fp_pid;
char tmp[20]="";
if(argc!=2)
{
printf("usage: %s start|stop\n", argv[0]);
exit(1);
}
void Term_func(int sig)
{
shutdown(listen_sock,SHUT_RDWR);
shutdown(data_sock,SHUT_RDWR);
shutdown(cmd_sock,SHUT_RDWR);
/*close(listen_sock);
close(data_sock);
close(cmd_sock);*/
//wait(-1);
waitpid(0,NULL,WUNTRACED);
exit(1);
}
signal(SIGTERM,Term_func);
if(strcmp(argv[1],"start")==0)
{
puts("Service myftp start [OK]");
//init_demon();
daemon(1,1);
pid=(int)getpid();
if((fp_pid=fopen("file_pid","w"))==NULL)
{
puts("AAAAAAAAA");
}
//sprintf(tmp,"%d\n",pid);
//fwrite(tmp,sizeof(char),sizeof(tmp),fp_pid);
fprintf(fp_pid,"%d\n",pid);
fclose(fp_pid);
}
else if(strcmp(argv[1],"stop")==0)
{
fp_pid=fopen("file_pid","r");
if(fp_pid==NULL)
{
puts("Service myftp stop [FAILED]");
exit(0);
//close(fp_pid);
}
else
{
fread(tmp,sizeof(char),sizeof(tmp),fp_pid);
pid=atoi(tmp);
puts("Service myftp stop [OK]");
fclose(fp_pid);
kill(pid,SIGTERM);
remove("file_pid");
exit(0);
}
}
signal(SIGCHLD, SIG_IGN);
listen_sock=CreateSocket(AF_INET, SOCK_STREAM, 0);
if(listen_sock==-1)
{
printf("Create socket faild!\n");
exit(1);
}
listen_addr.sin_family = AF_INET;
listen_addr.sin_addr.s_addr = htonl(INADDR_ANY);
listen_addr.sin_port = htons(21);
if(-1==Bind(listen_sock,(const struct sockaddr *)&listen_addr,sizeof(listen_addr)))
{
printf("bind port 21 faild!\n");
kill(pid,SIGTERM);
exit(1);
}
if(-1==Listen(listen_sock,10))
{
printf("listen port 21 faild!\n");
exit(1);
}
//init_demon();
while(1)
{
len=sizeof(cmd_addr);
cmd_sock=Accept(listen_sock,(const struct sockaddr *)&cmd_addr,&len);
if(0==fork())
{
islogin=0;
Close(listen_sock);
Write(cmd_sock,"220 (MyFtp Ver 3.2 SP3)\r\n",strlen("220 (MyFtp Ver 3.2 SP3)\r\n"));
while(1)
{
if(-1==ExpCmd(cmd_sock))
break;
}
Close(cmd_sock);
exit(0);
}
else
Close(cmd_sock);
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -