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

📄 log.c

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

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

int user_id;
//char * username;
/* 用户登陆 */
int login ()
{
	char username[USERNAMESIZ], userpsw[PWDSIZ];
	struct inode * inode;
	struct user tempuser[USERNUM];
	int i;

	/* 输入用户名 */
	printf( "Login: " );
	for( i = 0; i < USERNAMESIZ; i++ )
	{
		username[i] = getchar();
		if(( username[i] == '\n' ) || ( i == USERNAMESIZ - 1 ))
		{
			username[i] = '\0';
			break;
		}
	}

	/* 输入密码 */
	printf( "Password: " );
	for( i = 0; i < PWDSIZ; i++ )
	{
		userpsw[i] = getch();
		if( userpsw[i] == '\b' )
		{
			if( i != 0 )
			{
				putch( '\b' );
				putch( ' ' );
				putch( '\b' );
				i -= 2;
			}
			else
				i = -1;
		}
		else
			if(( userpsw[i] == '\r' ) || ( i == PWDSIZ - 1 ))
			{
				userpsw[i] = '\0';
				printf( "\n" );
				break;
			}
			else
				putch( '*' );
	}

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

	/* 检查是否存在该用户 */
	for( i = 0; i < USERNUM; i++ )
	{
		if( strcmp( tempuser[i].u_name, username ) == 0 )
			break;
	}
	if( i == USERNUM )							/* 没有该用户 */
	{
		printf( "Sorry! No such user, please check your user name.\n" );
		printf( "Please try to login again!\n" );
		return 0;								/* 登陆失败 */
	}

	/* 检查密码是否正确 */

	/* 密码不正确 */
	if( strcmp( tempuser[i].password, userpsw ) != 0 )
	{
		printf( "Sorry! password incorrect.\n" );
		printf( "Please try to login again!\n" );
		return 0;								/* 登陆失败 */
	}

	/* 正常登陆 */
	user_id = i;
	strcpy( user[user_id].u_name, tempuser[i].u_name );
//	strcpy( username, tempuser[i].u_name );
	user[user_id].u_uid = tempuser[i].u_uid;
	user[user_id].u_gid = tempuser[i].u_gid;
	user[user_id].u_default_mode = tempuser[i].u_default_mode;
	printf( "Login success!\n" );
	return 1;
}

int logout()
{
	int i;

/*
	for (i = 0; i < USERNUM; i++)
	{
		if (uid == user[i].u_uid)
			break;
	}
	if (i == USERNUM)
	{
		printf ("\nno such file\n");
		return 0;
	}
*/
	for (i = 0; i < NOFILE; i++)
	{
		if (user[user_id].u_ofile[i] != SYSOPENFILE + 1)
		{
			/* iput the inode free the sys_ofile and clear the user_ofile */
//			sys_no = user[user_id].u_ofile[i];
//			iput (sys_ofile[sys_no].f_inode);
			close( i );
//			sys_ofile[user[user_id].u_ofile[i]].f_count--;
//			user[user_id].u_ofile[i] = SYSOPENFILE + 1;
		}
	}
	return 1;
}

⌨️ 快捷键说明

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