• 【操作系统】实验一 Linux初步


    Linux初步

    一、实验目的

    通过proc文件系统观察整个Linux内核和系统的一些重要特征,并编写一个程序,使用proc文件系统获得以及修改系统的各种配置参数。
    本实验需要学生具有Linux的基本操作技能,以及采用C语言编写程序的能力。

    二、实验要求与内容、过程与结果

    以超级用户的身份登录Linux系统,并进入/proc目录,键入“ls”命令,查看该目录下的内容,同时查看每个文件的读写权限。
    1、请回答下列问题:

    • CPU的类型和型号。
      首先进入/proc目录,使用ls命令查看目录下内容,
      再通过cat cpuinfo命令查看cpu的类型和型号
      1
      2

    • 所使用的Linux的版本。
      使用cat version命令查看Linux版本
      3

    • 从启动到当前时刻所经过的时间。
      使用cat uptime命令查看从启动到当前时刻所经过的时间
      4

    • 当前内存状态。
      使用cat meminfo命令查看内存状态
      5

    2、编写一个程序getinfo.c,编译后并在命令行带命令参数来运行该程序,获得内核参数 (例如网络主机名、共享内存容量、文件句柄的最大参数等) 在屏幕上显示出来。
    运行过程实例如下(获取文件句柄最大参数):
    [root@Linux / ]# ./getinfo filemax
    filemax :18626

    程序设计

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    int main(int argc, char *argv[]){
        if(argc != 2){
            printf("Usage: %s \n", argv[0]);
            return 1;
        }
    
        char path[50] = "/proc/sys/fs/";
        strcat(path, argv[1]);
    
        int fd = open(path, O_RDONLY);
        if(fd == -1){
            perror("open error");
            return 1;
        }
    
        char buffer[150];
        int size = read(fd, buffer, sizeof(buffer));
        if(size == -1){
            perror("read error");
            close(fd);
            return 1;
        }
    
        buffer[size] = '\0';
    
        close(fd);
    
        printf("%s: %s", argv[1], buffer);
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    程序分析

    该程序是一个简单的Linux系统命令行程序,可以读取系统内核中的某些参数值,并将其输出到控制台上。

    首先,该程序会判断输入的参数个数是否为2,如果不是则输出“Usage: 程序名 ”,并返回1表示错误。如果参数个数正确,则会将参数值加到一个字符串中,并在字符串开头加上“/proc/sys/fs/”,得到一个表示内核参数文件的路径。

    接着,该程序会使用open函数打开所得到的文件路径,并返回一个文件描述符。如果open函数返回值为-1,则说明打开文件失败,这时程序会输出一个错误信息,并返回1表示错误。

    接下来,程序使用read函数从文件中读取数据,并将数据存储到一个字符数组中。如果read函数返回值为-1,则说明读取文件失败,程序会输出一个错误信息,关闭文件,并返回1表示错误。否则,程序将读取的数据末尾添加一个空字符,关闭文件,将读取到的数据输出到控制台上,完成程序功能。

    总体来说,该程序使用了open、read和close等系统调用函数,实现了一个简单的读取内核参数的命令行工具。

    运行结果

    6

    3、编写一个程序setsys.c,编译后并在命令行带命令参数来运行该程序,用来修改内核参数(任意的参数均可(例如网络主机名、共享内存容量、文件句柄的最大参数等)。
    运行过程实例如下:
    [root@Linux / ]# ./setsys filemax
    Input filemax parameter:21545
    注释:实例中加波浪线的部分为键盘输入内容。通过运行getinfo filemax来确认是否修改成功。

    程序设计

    #include
    #include
    #include
    #include
    #include
    #include
    #include
    
    int main(int argc, char *argv[]){
        if(argc != 2){
            printf("Usage: %s \n", argv[0]);
            return 1;
        }
    
        char path[50] = "/proc/sys/fs/";
        strcat(path, argv[1]);
    
        int fd = open(path, O_WRONLY);
        if(fd == -1){
            perror("open error");
            return 1;
        }
    
        printf("Input %s parameter: ", argv[1]);
        char buffer[20];
        fgets(buffer, sizeof(buffer), stdin);
    
        if(write(fd, buffer, strlen(buffer)) == -1){
            perror("write error");
            close(fd);
            return 1;
        }
    
        close(fd);
    
        printf("Set %s parameter to: %s", argv[1], buffer);
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    程序分析

    该程序是一个简单的Linux系统命令行程序,可以设置系统内核中的某些参数值。

    程序的第一步是判断输入的参数个数是否为2,如果不是则输出“Usage: 程序名 ”,并返回1表示错误。如果参数个数正确,则会将参数值加到一个字符串中,并在字符串开头加上“/proc/sys/fs/”,得到一个表示内核参数文件的路径。

    接着,程序使用open函数打开所得到的文件路径,并返回一个文件描述符。如果open函数返回值为-1,则说明打开文件失败,这时程序会输出一个错误信息,并返回1表示错误。

    接下来,程序会提示用户输入要设置的参数值,使用fgets函数读取用户的输入,并将用户输入的字符串写入内核参数文件中。如果write函数返回值为-1,则说明写入文件失败,程序会输出一个错误信息,关闭文件,并返回1表示错误。否则,程序将关闭文件,并输出设置后的参数值,完成程序功能。

    总体来说,该程序使用了open、write和close等系统调用函数,实现了一个简单的设置内核参数的命令行工具。

    运行结果

    7

    系列文章

  • 相关阅读:
    OpenCV:python图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数
    如何防止sql恶意注入
    算法刷题 week4
    华为云云耀云服务器L实例评测|云耀云服务器L实例部署ZFile在线网盘服务
    学习贪心算法
    洛谷P1506 拯救oibh总部 —DFS—围墙
    js实现一个数据结构——栈
    基于Apache 开源组件搭建大数据集群
    2022-03-01-SpringMVC
    A-LOAM学习
  • 原文地址:https://blog.csdn.net/m0_68111267/article/details/133145097