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

文章目录

  • Linux初步
    • 一、实验目的
    • 二、实验内容

Linux初步

一、实验目的

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

二、实验内容

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

  • CPU的类型和型号。
    首先进入/proc目录,使用ls命令查看目录下内容,
    再通过cat cpuinfo命令查看cpu的类型和型号
    【操作系统】实验一 Linux初步_第1张图片
    【操作系统】实验一 Linux初步_第2张图片

  • 所使用的Linux的版本。
    使用cat version命令查看Linux版本
    【操作系统】实验一 Linux初步_第3张图片

  • 从启动到当前时刻所经过的时间。
    使用cat uptime命令查看从启动到当前时刻所经过的时间
    【操作系统】实验一 Linux初步_第4张图片

  • 当前内存状态。
    使用cat meminfo命令查看内存状态
    【操作系统】实验一 Linux初步_第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;
}

程序分析

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

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

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

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

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

运行结果

【操作系统】实验一 Linux初步_第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;
}

程序分析

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

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

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

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

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

运行结果

【操作系统】实验一 Linux初步_第7张图片

你可能感兴趣的:(《,操作系统,》,linux,服务器,运维)