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

news2025/5/13 16:43:26

文章目录

  • 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<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等系统调用函数,实现了一个简单的读取内核参数的命令行工具。

运行结果

6

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等系统调用函数,实现了一个简单的设置内核参数的命令行工具。

运行结果

7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用LDA(线性判别公式)进行iris鸢尾花的分类

线性判别分析((Linear Discriminant Analysis &#xff0c;简称 LDA)是一种经典的线性学习方法&#xff0c;在二分类问题上因为最早由 [Fisher,1936] 提出&#xff0c;亦称 ”Fisher 判别分析“。并且LDA也是一种监督学习的降维技术&#xff0c;也就是说它的数据集的每个样本都…

【LeetCode】来玩玩四数之和吧

Problem: 18. 四数之和 文章目录 解题思路算法原理分析复杂度Code 解题思路 讲述看到这一题的思路 首先我们来分析一下本题的思路&#xff1a;这题和我们之前所讲过的一题叫做 三数之和&#xff0c;与本题非常得类似&#xff0c;如果没有做过的扣友可以先去做做看那我们来分析一…

【OpenSSL】单向散列函数

什么是单向散列函数 任意长度数据生成固定长度是散列快速计算消息变化散列变化单向不可逆&#xff0c;抗碰撞 应用场景 文件完整性口令加密消息认证伪随机数配合非对称加密做数字签名比特币工作量证明 单向hash抗碰撞 弱抗碰撞 给定X和hash值的情况下&#xff0c;找到另外…

2. PCIE TLP解包封包

第二十一讲、PCIE的TLP包的封包解包原理.pdf 00 Packet Coding.docx 掌握如何发送接收 Mrd&#xff08;memory read TLP&#xff09;、Mwr(Memory write TLP)、Cpl(Completion TLP)和Cpld(Completion with data TLP) 命令包 1、 TLP 包是由 PCIE 的 Endpoint 或者 Root Complex…

使用PageHelper进行分页

使用PageHelper进行分页 1. 使用Spring Boot2. 不使用Spring Boot的实现 1. 使用Spring Boot 要在Spring MVC中使用PageHelper进行分页&#xff0c;你需要完成以下几个步骤&#xff1a; 添加PageHelper依赖&#xff1a;在你的项目中添加PageHelper的Maven或Gradle依赖。例如&…

22年4月后树莓派烧录镜像、联网以及ssh 远程投屏失败的注意事项

1. 树莓派刷机 树莓派在22年4月后新增了关于对用户安全的修改&#xff0c;所以之前的在SD 卡中放入ssh文件以及wifi 账号和密码的方法已经不好使了。很多用户发现烧录镜像后找不到树莓派ip了&#xff0c;特别是没有屏幕的用户&#xff0c;ssh更是连接不上。 解决办法就是官网…

[C#]vs2022安装后C#创建winform没有.net framework4.8

问题&#xff0c;我已经在visualstudio安装程序中安装了.net框架4.8的SDK和运行时。 然而&#xff0c;我在visual studio 2022中找不到已安装的框架。 我已经检查了我的VS 2019&#xff0c;它可以很好地定位网络框架4.8&#xff0c;它可以构建我的项目。但VS 2022不能。 我已经…

RocketMQ源码解析(上)

一、ACL权限控制 应用场景&#xff1a; ​RocketMQ提供了针对队列、用户等不同维度的非常全面的权限管理机制。通常来说&#xff0c;RocketMQ作为一个内部服务&#xff0c;是不需要进行权限控制的&#xff0c;但是&#xff0c;如果要通过RocketMQ进行跨部门甚至跨公司的合作&…

公司如何监控员工自己的电脑(监控单位员工电脑的几个好用的方法)

在现代的商业环境中&#xff0c;公司需要在保护敏感数据和确保员工生产力之间找到平衡。为此&#xff0c;许多公司选择监控员工的电脑使用情况。本文将详细介绍如何专业且有效地监控公司员工电脑。 一、为何需要监控员工电脑 公司可能会出于各种原因去监控员工的电脑使用&…

CSS中的定位

position 的属性与含义 CSS 中的 position 属性用于控制元素在页面中的定位方式&#xff0c;有四个主要的取值&#xff0c;每个取值都会影响元素的布局方式&#xff0c;它们是&#xff1a; static&#xff08;默认值&#xff09;&#xff1a; 这是所有元素的初始定位方式。在静…

字符函数和字符串函数(C语言进阶)

字符函数和字符串函数 一.求字符串长度1.strlen 二.长度不受限制的字符串函数介绍1.strcpy2.strcat3.strcmp 前言 C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在常量字符串中或者字符数组中。 字符串常量适用于那…

[刷题记录]牛客面试笔刷TOP101(二)

(一)传送门: [刷题记录]牛客面试笔刷TOP101(一)_HY_PIGIE的博客-CSDN博客 目录 1.合并二叉树 2.二叉树的镜像 3.判断是否为二叉搜索树 4.判断是不是完全二叉树 1.合并二叉树 合并二叉树_牛客题霸_牛客网 (nowcoder.com) 思路: 在后序遍历的基础上进行,两颗二叉树可…

【网络协议】Http-中

搜索引擎&#xff1a;搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息&#xff0c;在对信息进行组织和处理后&#xff0c;为用户提供检索服务&#xff0c;将检索的相关信息展示给用户的系统。搜索引擎是工作于互联网上的一门检索技术&#xff0c;它旨在提…

WPF 类库 使用handycontrol 配置

在学习wpf发现了一个非常好用的UI库 handycontrol 但是很多地方讲的都是WPF应用程序怎么用&#xff0c;很少有讲类库那么引用的问题&#xff0c;所以在这里自己总结一下&#xff0c;希望能帮助到大家&#xff1a; 1.添加 handycontrol 的引用&#xff1b;安装&#xff0c;我已…

Webpack打包图片

一、在js文件中引入图片 二、在package.config.js中配置加载器 module.exports {mode: "production", // 设置打包的模式&#xff1a;production生产模式 development开发模式module: {rules: [// 配置img加载器{test: /\.(jpg|png|gif)$/i,type:"asset/resou…

计算机竞赛 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(六)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 模型训练1&#xff09;数据集分析2&#xff09;数据预处理3&#xff09;模型创建4&#xff09;模型训练5&#xff09;获取特征矩阵 2. 后端Django3. 前端微信小程序1&#xff09;小程序全局配置文件2&#xff09…

【广州华锐互动】煤矿坍塌VR事故警示教育突破了哪些限制?

煤矿坍塌事故是煤矿行业的一种常见事故&#xff0c;对于矿工的生命安全和生产设备都存在着严重威胁。传统的安全培训方式往往难以真实地呈现事故场景&#xff0c;难以达到理想的安全教育效果。而虚拟现实&#xff08;VR&#xff09;技术的出现&#xff0c;为煤矿安全教育带来了…

测试人职场生存必须避开的5个陷阱

在互联网职场的工作发展道路上&#xff0c;软件测试人员其实在公司中也面临着各种各样的职场陷阱&#xff0c;有些可能是因为项目业务不熟练造成的&#xff0c;有些可能是自身技术能力不足导致的...等等。软件测试入门相对来说比较容易些&#xff0c;但是想要在测试行业长久发展…

力扣刷题-数组-数组理论基础

数组是存放在连续内存空间上的相同类型数据的集合。 需要两点注意的是 数组下标都是从0开始的。数组内存空间的地址是连续的 正是因为数组的在内存空间的地址是连续的**&#xff0c;所以我们在删除或者增添元素的时候&#xff0c;就难免要移动其他元素的地址。** 注意&…