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

📄 fs.c

📁 一个完整的SHELL实现源代码
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -