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

📄 miniftp.c

📁 一个LINUX下的服务器的小程序.可供学习.
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<signal.h>
#include "miniFTP.h"
#include "file_operation.h"
#include "symbol_table.h"
#include "ftp_operation.h"

//static int SYS_LOG_TAG = 0 ;
int OPEN_LOG_ENABLE = 0 ;
struct run_env  run_env;
struct user_env user_env;

static void __daemon_init(void) ;
static void _init_user_env(void);


int main(void){
	char errbuf[MINIFTP_ERRBUF_SIZE] ;
	int rtv = CONFIG_FILE_OK ;

	int open_log = openLogFile() ;
	if(open_log != SUCCESS){
		openlog("Miniftp", LOG_PID, LOG_USER) ;
		syslog(LOG_LOCAL1, "cannot open log file: %m") ;
	}else{
		OPEN_LOG_ENABLE = 1 ;
	}
	
	//check the config file.	
	if((rtv = read_configure( errbuf)) != CONFIG_FILE_OK){
		printf("cannot read configure : %s\n",errbuf) ;
		exit(rtv) ;
	}

	#ifndef DEBUG
	//__daemon_init();
	#endif

	_init_user_env() ;

	start_ftp_server() ;

	if(open_log != SUCCESS){
		closelog() ;
	}
	return 0 ;

	
}


static void __daemon_init(){
	pid_t  pid ;
	int tindex = 0 ;
	int tmp = FILE_OPERATION_OK ;
	
	if((pid = fork()) == -1){
		perror("first fork error.") ;
		write_log("fork error", 0);
		exit(errno);
	}else if(pid){ // parent process
		exit(0) ;
	}

	if(setsid() < 0){
		perror("setsid error.") ;
		write_log("setsid error.", 0) ;
		exit(errno) ;
	}

	signal(SIGHUP,SIG_IGN) ;

	if((pid = fork()) == -1){
		perror("second fork error") ;
		write_log("second fork error", 0);
		exit(errno) ;
	}else if(pid){
		exit(0) ;  //the first child terminates
	}

	if(chroot("/") == -1){
		perror("chroot error.") ;
		write_log("chroot error.", 0) ;
		exit(errno) ;
	}

	

	if((tmp = chdir(run_env.ftp_dir)) == -1){
		perror("chdir error.") ;
		write_log("chdir error", 0) ;
		exit(errno) ;
	}

	umask(0) ;

	
	for(; tindex < MAXFD; tindex++){
		r_close(tindex) ;
	}

}

static void _init_user_env(void){
	user_env.login_in = FALSE ;
	strcpy(user_env.user_name,"") ;
	user_env.user_id = 0 ;
	user_env.client_ip = NULL ;
	user_env.client_data_port = 0 ;
	user_env.login_time = 0 ;
	user_env.last_operation_time = 0 ;
	user_env.enable_upload = TRUE ;
	strcpy(user_env.current_path,"/") ;
	
}
	

	
	












































⌨️ 快捷键说明

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