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

📄 usr.cpp

📁 对linuix 文件系统的模拟,包含了若干文件命令
💻 CPP
字号:
#include "usr.h"
#include <sstream>
#include <string>
#include <fstream.h>
#include "global.h"

namespace gilyou
{

user_t current_usr;

/*************************** user.info文件格式 ***************************/
/********* uname:password:deleted:uid:gid:home:ihome:ctime:atime *********/
int get_usr(char uname[],char upasswd[],user_t &usr,bool update_time){
    std::fstream fs;
    std::istringstream iss;
    char buffs[COMMAND_SIZE];
    system("IF NOT EXIST sys MKDIR sys");
    fs.open(SYS_USER,std::ios::in | std::ios::out);
    if(fs.fail()){
        print("sys\\usr.info file missed.",INDENT | NEW_LINE);
        fs.close();
        return READ_FILE_ERROR;
    }
    std::ios::pos_type start = 0;
    while(!fs.eof()){
        start = fs.tellg();
        fs.getline(buffs,COMMAND_SIZE);
        replace(buffs,' ',':');
        iss.clear();
        iss.str(buffs);
        iss>>usr.uname>>usr.upasswd>>usr.deleted>>usr.uid>>usr.gid>>usr.home>>usr.ihome>>usr.ctime>>usr.atime;

        #if DEBUG
        print(string_cat(2,"uname = ",usr.uname), INDENT | NEW_LINE);
        print(string_cat(3,"upasswd = ",usr.upasswd,"\n deleted = "));
        print(usr.deleted,INDENT | NEW_LINE);
        print("uid = ");
        print(usr.uid,INDENT | NEW_LINE);
        print("gid = ",INDENT);
        print(usr.gid,INDENT | NEW_LINE);
        print(string_cat(3,"home = ",usr.home,"\n ctime = "));
        print(usr.ctime,INDENT | NEW_LINE);
        print("atime = ",INDENT);
        print(usr.atime,INDENT | NEW_LINE);
        #endif

        if(string_equal(usr.uname,uname) && string_equal(usr.upasswd,upasswd) && (usr.deleted == NOT_DELETED)){
            if(update_time){
                fs.seekp(start);
                fs.clear();
                fs<<usr.uname<<":"<<usr.upasswd<<":"<<usr.deleted<<":"<<usr.uid<<":"<<usr.gid<<":"<<usr.home<<":"<<usr.ihome<<":"<<usr.ctime<<":"<<time(NULL);
            }
            fs.flush();
            fs.close();
            return SUCCESS;
        }
    }
    fs.close();
    return NOT_EXISTS;
}

bool usr_exists(char uname[])
{
    std::ifstream ifs;
    std::istringstream iss;
    user_t usr;
    char buffs[COMMAND_SIZE];
    system("IF NOT EXIST sys MKDIR sys");
    ifs.open(SYS_USER,std::ios::in);
    if(ifs.fail()){
        print("sys\\usr.info file missed.",INDENT | NEW_LINE);
        ifs.close();
        return false;
    }
    std::ios::pos_type start = 0;
    while(!ifs.eof()){
        start = ifs.tellg();
        ifs.getline(buffs,COMMAND_SIZE);
        replace(buffs,' ',':');
        iss.clear();
        iss.str(buffs);
        iss>>usr.uname>>usr.upasswd>>usr.deleted>>usr.uid>>usr.gid>>usr.home>>usr.ihome>>usr.ctime>>usr.atime;
        if(string_equal(usr.uname,uname) && (usr.deleted == NOT_DELETED)){
            ifs.close();
            return true;
        }
    }
    ifs.close();
    return false;
}

void copy_usr(user_t &to_be_init,user_t for_init)
{
    to_be_init.uid = for_init.uid;
    to_be_init.gid = for_init.gid;
    to_be_init.deleted = for_init.deleted;
    to_be_init.ihome = for_init.ihome;
    strcpy(to_be_init.uname,for_init.uname);
    strcpy(to_be_init.upasswd,for_init.upasswd);
    strcpy(to_be_init.home,for_init.home);
    to_be_init.ctime = for_init.ctime;
    to_be_init.atime = for_init.atime;
}

}

⌨️ 快捷键说明

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