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

📄 reg.c

📁 设计并实现一个多用户多级目录结构的文件系统
💻 C
字号:
/************************************************/
/*												*/
/*					reg.c						*/
/*												*/
/************************************************/

#include <stdio.h>
#include "filsys.h"
#include <string.h>

/* 用户注册函数 */
reg()
{
	char regname[USERNAMESIZ], regpsw[PWDSIZ], regpsw2[PWDSIZ];
	struct inode * inode;
	struct user tempuser[USERNUM];
	int i, newid;
	
	inode = iget( 1 );
	fseek( fd, DATASTART + BLOCKSIZ * inode->i_addr[0], SEEK_SET );
	fread( tempuser, 1, sizeof( struct user ) * USERNUM, fd );
	for( newid = 0; newid < USERNUM; newid++)
	{
		if( strcmp( tempuser[newid].u_name, " " ) == 0 )
			break;
	}
	if( newid == USERNUM )
	{
		printf( "The system have reach the max users.\n" );
		printf( "You can not register now!\n" );
		return;
	}

	/* 输入用户名 */
	printf( "Please input your user name(Max 11 characters):\n" );

	for( i = 0; i < USERNAMESIZ; i++ )
	{
		regname[i] = getchar();
		if(( regname[i] == '\n' ) || ( i == USERNAMESIZ - 1 ))
		{
			regname[i] = '\0';
//			printf( "\n" );
			break;
		}
//		else
//			putch( regname[i] );
	}

	/* 输入密码 */
	printf( "Please input your password(Max 11 characters):\n" );
	for( i = 0; i < PWDSIZ; i++ )
	{
		regpsw[i] = getch();
		if( regpsw[i] == '\b' )
		{
			if( i != 0 )
			{
				putch( '\b' );
				putch( ' ' );
				putch( '\b' );
				i -= 2;
			}
			else
				i = -1;
		}
		else
			if(( regpsw[i] == '\r' ) || ( i == PWDSIZ - 1 ))
			{
				regpsw[i] = '\0';
				printf( "\n" );
				break;
			}
			else
				putch( '*' );
	}

	/* 再次输入密码 */
	printf( "Please input your password again:\n" );
	for( i = 0; i < PWDSIZ; i++ )
	{
		regpsw2[i] = getch();
		if( regpsw2[i] == '\b' )
		{
			if( i != 0 )
			{
				putch( '\b' );
				putch( ' ' );
				putch( '\b' );
				i -= 2;
			}
			else
				i = -1;
		}
		else
			if(( regpsw2[i] == '\r' ) || ( i == PWDSIZ - 1 ))
			{
				regpsw2[i] = '\0';
				printf( "\n" );
				break;
			}
			else
				putch( '*' );
	}
	
	/* 检查用户名是否存在 */
	for( i = 0; i < newid; i++ )
	{
		if( strcmp( tempuser[i].u_name, regname ) == 0 )
		{
			printf( "Sorry! This user have already exited!\n" );
			return;
		}
	}

	/* 检查两次输入的密码是否一致 */
	if( strcmp( regpsw, regpsw2 ) != 0 )
	{
		iput( inode );
		printf( "Password Incorrect! Can't Register!\n" );
		return;
	}
	strcpy( tempuser[newid].u_name, regname );
	strcpy( tempuser[newid].password, regpsw );
	tempuser[newid].u_default_mode = NORMALMODE;
	tempuser[newid].u_gid = 1;
	tempuser[newid].u_uid = newid + 1;

	fseek( fd, DATASTART + BLOCKSIZ * inode->i_addr[0], SEEK_SET );
	fwrite( tempuser, 1, sizeof( struct user ) * USERNUM, fd );

	iput( inode );
	printf( "OK! You have register! You can login your accounts!\n" );
	return;
}

⌨️ 快捷键说明

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