编写操作系统1(用户态进程)

(只放出部分代码)

用户态进程:

我在这里只创建了两个进程 tty1 和 tty2 ,并且tty1 相当于 grome界面(我没写,只是放出来以作为区别)。

tty1登录的时候需要读取文件,由于我把 tty.c 文件放在了另一个文件夹,所以在用 fopen() 相对路径打开文件的时候出现了路径错误的问题,这里的路径起始位置是以入口 main 所存在的目录为相对路径的起始点,不然永远都打不开

#include "../sys/conf.h" 

int startos() {
    printf("hello\n");
    exit(1);
}


int tty_host(char lname[256], char lpwd[256]) {
    FILE* fp;
    char str[256];
    char name[256], pwd[256];
    int i, len, flag;
    flag = 0;
    fp = fopen("./inittab/guestlist/passwd", "rb");
    if(NULL == fp) {
        printf("open file failed\n");
        return ERROR;
    }
    while(!feof(fp)) {
        fscanf(fp, "%s", str);
        len = strlen(str);
        if('N' == str[0]) {  //NAME= 6个
            for(i = 5; i < len; i++) {
                name[i-5] = str[i];
            }
            flag = 1;
        }
        else if('P' == str[0]) {  // PASSWORD= 9个
            if(9 == len) {
                memset(str, 0, sizeof(str));
            }
            else {
                for(i = 9; i < len; i++) {
                    pwd[i-9] = str[i];
                }
            }
            flag = 2;
        }
        if(2 == flag) {
            if(!strcmp("admin", lname) && !strcmp(pwd, lpwd)) {
                privallage = ADMIN;
                fclose(fp);
                startos();
            }
            else if(!strcmp(name, lname) && !strcmp(pwd, lpwd)) {
                privallage = GUEST;
                fclose(fp);
                startos();
            }
            flag = 0;
        }
    }
    fclose(fp);
    printf("You are not allowed.\n");
    return 0;
}

void tquit(int sig) {
    printf("\nGood bye\n");
    exit(0);
}

int getty() {
    pid_t tty1, tty1_pid;  // 终端一号 主用户
    pid_t tty2, tty2_pid;  // 终端二号
    int stat_val, retval;

    char name[256], pwd[256];

    retval = 0;

    tty1 = fork();

    switch(tty1) {
        case -1:
            printf("fork failed\n");
            break;
        case 0:
            (void) signal(SIGINT, tquit);
            while(!retval) {
                printf("Login:");
                scanf("%s", name);
                printf("Password:");
                scanf("%s", pwd);
                retval = tty_host(name, pwd);
            }
            break;
        default:
            printf("This is parent\n");
    }

    tty1_pid = wait(&stat_val);
    printf("PID = %d %d\n", tty1_pid, stat_val);

    return 0;
}


另外对于进程控制这里,tty1 为终端一号,即用来启动grome

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值