fs.c

来自「一个完整的SHELL实现源代码」· C语言 代码 · 共 90 行

C
90
字号
#include "fs.h"

static s_int logged=0;

struct passwd g_user;


/*用户登陆函数*/
s_int login()
{
    char uname[30];
    file *fp;
    s_int gc,uc;
    //clrscr();
    printf("Welcome to UNIX OS!\n");
    printf("user login:"); scanf("%s",uname);
    while((fp=open("/passwd",FREAD|FWRITE))==NULL)
    {
    	fp=create("/passwd");
    	if(fp==NULL)panic("login: passwd file create error.\n");
    	g_user.gid=0; /* group count */
    	g_user.uid=0; /* user count */
    	write(fp,sizeof(struct passwd),&g_user);
    	close(fp);    	
    }
    read(fp, sizeof(struct passwd), &g_user);
    gc=g_user.gid;
    uc=g_user.uid;
    while(read(fp, sizeof(struct passwd), &g_user)==0)
    {
    	if(!strcmp(uname,g_user.name))
    	{
		logged=1;
		break;
    	}
    }
    if(logged!=1)
    {
    	 strcpy(g_user.name,uname);
    	 g_user.gid=gc+1;
    	 g_user.uid=uc+1;
    	 write(fp,sizeof(struct passwd),&g_user);
    	 seek(fp,0,SEEK_SET);
    	 write(fp,sizeof(struct passwd),&g_user);
    }    	
    close(fp);
    chdir("/");	/* enter root directory */
    printf("User [%s] logged.\n",uname);
    return 0;
}

/*退出*/
s_int logout()
{
    printf("Bye!\n");
    logged=0;
    return 0;
}

/*文件系统格式化函数*/
s_int format()
{
    hd_format();
    return 0;
}

/*安装文件系统函数*/
s_int install()
{
    printf("Initializing...\n");
    hd_init();
    printf("System Loaded.\n");
    /*system("pause");*/
    return 0;
}

/*退出文件系统函数*/
s_int halt()
{
    if(logged)logout();
    iwrite_back();
    bwrite_back();
    hd_leave();
    printf("System halt.\n");
    /*#ifdef DEBUG_MODE
    system("pause");
    #endif*/
    return 0;
}

⌨️ 快捷键说明

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