文章目录
- Linux初步
- 一、实验目的
- 二、实验内容
Linux初步
一、实验目的
通过proc文件系统观察整个Linux内核和系统的一些重要特征,并编写一个程序,使用proc文件系统获得以及修改系统的各种配置参数。
本实验需要学生具有Linux的基本操作技能,以及采用C语言编写程序的能力。
二、实验内容
以超级用户的身份登录Linux系统,并进入/proc目录,键入“ls”命令,查看该目录下的内容,同时查看每个文件的读写权限。
1、请回答下列问题:
-
CPU的类型和型号。
首先进入/proc目录,使用ls命令查看目录下内容,
再通过cat cpuinfo命令查看cpu的类型和型号
-
所使用的Linux的版本。
使用cat version命令查看Linux版本
-
从启动到当前时刻所经过的时间。
使用cat uptime命令查看从启动到当前时刻所经过的时间
-
当前内存状态。
使用cat meminfo命令查看内存状态
2、编写一个程序getinfo.c,编译后并在命令行带命令参数来运行该程序,获得内核参数 (例如网络主机名、共享内存容量、文件句柄的最大参数等) 在屏幕上显示出来。
运行过程实例如下(获取文件句柄最大参数):
[root@Linux / ]# ./getinfo filemax
filemax :18626
程序设计
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>int main(int argc, char *argv[]){if(argc != 2){printf("Usage: %s <parameter>\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等系统调用函数,实现了一个简单的读取内核参数的命令行工具。
运行结果
3、编写一个程序setsys.c,编译后并在命令行带命令参数来运行该程序,用来修改内核参数(任意的参数均可(例如网络主机名、共享内存容量、文件句柄的最大参数等)。
运行过程实例如下:
[root@Linux / ]# ./setsys filemax
Input filemax parameter:21545
注释:实例中加波浪线的部分为键盘输入内容。通过运行getinfo filemax来确认是否修改成功。
程序设计
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>int main(int argc, char *argv[]){if(argc != 2){printf("Usage: %s <parameter>\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等系统调用函数,实现了一个简单的设置内核参数的命令行工具。
运行结果