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

📄 check_user_ip1.c

📁 读配置文件。在linux和windows下都可执行。
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct user_type
{
	char name[15];
	char code[8];
	char ip[16];
	char time[25];
}USER;
//从文件读数据,data_kind为0,读用户姓名,为1,读用户密码,为2,读ip地址,为3,读时间。
//*n为
int read_data(USER *user,FILE *user_file,long *n,int data_kind)
{
	long i=*n/128;
	char buf[35];
	char *p=buf;
	
	long file_end;
	memset(buf,'\0',sizeof(buf));
	if(data_kind>3)
	{
		printf("data_kind is out of range.\n");
		return 0;
	}
	if((user_file=fopen("user1.txt","r+"))==NULL)
	{
		ferror(user_file);
		return 0;
	}
	if(feof(user_file)==1)
	{
		printf("file is empty.\n");
		return 0;
	}
	fseek(user_file,0,2);
	file_end=ftell(user_file);
	if (*n>file_end)
	{
		printf("file reading is out of range.\n");
		return 0;
	}
	if(fseek(user_file,i*128+data_kind*32,0)==-1)
	{
		ferror(user_file);
		return 0;
	}
	fgets(buf,32,user_file);
	for(;*p!=' '&&*p!='\n'&&*p!=';';p++);
	*p='\0';
	switch(data_kind)
	{
	case 0:
		strcpy(user->name,buf);
		break;
	case 1:
		strcpy(user->code,buf);
		break;
	case 2:
		strcpy(user->ip,buf);
		break;
	case 3:
		strcpy(user->time,buf);
		break;
	default:
		break;
	}
	*n=ftell(user_file);
	fclose(user_file);
	return 1;
	}
int write_data(USER *user,FILE *user_file,long n,int data_kind)
{
	int i;
	char space[]="                             ";
	i=n/128;
	if((user_file=fopen("user1.txt","r+"))==NULL)
		{
		 ferror(user_file);
		 return 0;
		}

	switch (data_kind)
		
	{	
		case 0:
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fwrite(space,1,29,user_file);
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fprintf(user_file,"%s",user->name);
			break;
		case 1:
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fwrite(space,1,29,user_file);
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fprintf(user_file,"%s",user->code);
			break;
		case 2:
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fwrite(space,1,29,user_file);
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fprintf(user_file,"%s",user->ip);
			break;
		case 3:
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fwrite(space,1,29,user_file);
			fseek(user_file,(long)(i*128+(data_kind*32)),0);
			fprintf(user_file,"%s",user->time);
			break;
	}
	return 1;
}
//检测用户与密码是否正确,正确返回1,错误返回0;
//user为传入的用户数据,user1为空,从文件里读出的数据存入。
int check_user_login(USER *user,USER *user1)
{
	long file_end,locate=0;
	FILE *fp=fopen("user1.txt","r");
	fseek(fp,0,2);
	file_end=ftell(fp);
	fclose(fp);
	while(locate<file_end)
	{
		if(read_data(user1,fp,&locate,0)==0)
		{
			printf("read_data user fail.\n");
			return 0;
		}
		if(strcmp(user->name,user1->name)==0)
		{
			if(read_data(user1,fp,&locate,1)==0)
		{
			printf("read_data user fail.\n");
			return 0;
		}
			if(strcmp(user->code,user1->code)==0)
			{
				write_data(user,fp,locate,2);
				write_data(user,fp,locate,3);
				printf("user and code is corrcet.\n");
				return 1;
				//cgi
			}
			else
			{
				printf("code is error.\n");
				return 0;
			}
		}
		else
			locate+=128;


	}
	if(locate>file_end)
	{
		printf("user doesn't exist.\n");
		return 0;
	}
	return 1;
}
//检测ip地址是否存在,与时间是否超时;
//如果ip存在,判断是否超时,超时则提示退出;
//如果ip不存在,返回0;
//user为传入的用户数据,user1为空,从文件里读出的数据存入。  
int check_user_ip(USER* user,USER *user1)
{
	long file_end,locate=0;
	FILE *fp=fopen("user1.txt","r");
	fseek(fp,0,2);
	file_end=ftell(fp);

	while(file_end>locate)
	{
		if(read_data(user1,fp,&locate,2)==0)
		{
			printf("read_data user fail.\n");
			return 0;
		}
		if(strcmp(user->ip,user1->ip)==0)
		{
			if(read_data(user1,fp,&locate,3)==0)
			{

			printf("read_data user fail.\n");
			return 0;
			}
			if(strcmp(user->time,user1->time)==0)
			{
				write_data(user,fp,locate,3);
				printf("success.\n");
				return 1;
				//cgi
			}
			else
			{
				printf("time out.\n");
				return 0;
			}
		}
		else
			locate+=128;
	}
	if(locate>file_end)
	{
		printf("ip does't exist.\n");
		return 0;
	}
	return 1;
}
main()
{
	USER *user,*user1;
	user=(USER*)malloc(sizeof(USER));
	user1=(USER*)malloc(sizeof(USER));
	strcpy(user->name,"liu");
	strcpy(user->code,"123");
	strcpy(user->ip,"192.1.1.1");
	strcpy(user->time,"2008/1/1");
	check_user_ip(user,user1);
}

⌨️ 快捷键说明

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