当前位置: 首页 > news >正文

linux内核

一 初识linux内核

1.1操作系统和内核简介

操作系统的精确定义并没有一个统一的标准,这里我认为操作系统是指整个系统负责完成最基本功能和系统管理的那些部分

这些部分包括内核,设备驱动程序,启动引导程序,基本的文件管理工具和系统工具

用户界面是操作系统的外在表象,内核才是操作系统的内在核心。内核有时候被称作管理者或者操作系统核心,内核独立于普通的应用程序,它一般处于系统态,这种被保护起来的空间称为内核空间

在系统中运行的程序通过系统调用来与内核通信,这种应用程序通常调用库函数,再由库函数通过系统调用界面,让内核代其完成各种不同的任务

这里是应用程序,内核和应减低关系

1.运行于用户空间,执行用户进程

2.运行于内核空间,处于进程上下文,代表某个特定的进程执行

3.运行于内核空间,处于中断上下文,于任何进程无关,处理某个特定的中断

以上所列几乎包括所有情况,即使边边角角的情况也不列外,例如,当cpu空闲的时候,内核就运行一个空进程,处于进程上下文,但运行内核空间

二 对Linux文件操作

对于linux文件的操作,这里使用linux的系统调用进程操作

2.1.linux文件进行拷贝

#include<iostream>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
using  namespace std;

int MAX_SIZE=1024;
int main()
{
    int fd=open("./text.txt",O_RDWR);
    int wfd=open("./copy.txt",O_CREAT|O_WRONLY);
    char buffer[1024];
    bzero(buffer,0);
    int size=0;
    while(size=read(fd,buffer,sizeof(buffer)))
    {
        write(wfd,buffer,size);
    }
    close(fd);
    close(wfd);
    return 0;
}




这段代码是对文件进行拷贝的代码,设定一个buffer数组,然后一直读,把读到的写入文件即可

这里没有对打开的文件和读写操作的成功进行判断,可自行添加

2.2 重定向到文件

这里的要求是把终端输入的按回车写入到文件中,直到输入over就停止

#include<iostream>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
using namespace std;

int MAX_SIZE=1024;
int main()
{
    int fd=open("over.txt",O_CREAT|O_WRONLY|O_TRUNC, 0644);
    char buffer[MAX_SIZE];
    bzero(buffer,0);
    int size=0;
    while(1)
    {
        char c;
        int i=0;
        while(i<MAX_SIZE-1)
        {
            size=read(STDIN_FILENO,&c,1);
            if(size<=0)
            {
                close(fd);
                //exit(0);
                return 1;
            }
            if(c=='\n')
            {
                buffer[i++]=c;
                break;
            }
           buffer[i++] = c;
        }
        buffer[i]='\0';

        char line[MAX_SIZE];
        strncpy(line,buffer,i);
        int len=strlen(line);
        if(len>0&&line[len-1]=='\n')
        {   
            line[len-1]='\0';
        }
        if(strcmp(line,"over")==0)
        {
            break;
        }

        //写入数据
        if(write(fd,buffer,i)==-1)
        {
            close(fd);
            return -1;
        }
    }
    close(fd);
    return 0;
}

这里因为按下回车才把输入的内容写入,所以不能一段一段读,这里采用一个字符一个字符读,处理输入的‘\n’,然后创建一个新的line数组用于处理输入over\n,因为如果直接比对会失败,因为后有一个回车

http://www.dtcms.com/a/123122.html

相关文章:

  • 2021-10-19 C++奇怪数
  • 牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记1
  • MCU控制4G模组(标准AT命令),CatM的最大速率?
  • 学习笔记四——Rust 函数通俗入门
  • 城电科技 | 从概念到落地:如何打造真正的智慧零碳园区?
  • 粘性定位(position:sticky)——微信小程序学习笔记
  • Diffusion Policy Visuomotor Policy Learning via Action Diffusion官方项目解读(二)(6)
  • 阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
  • js逆向入门图灵爬虫练习平台第六题
  • AI小程序+SpringAI+管理后台+源码+支持动态添加大模型+支持动态添加AI应用
  • ESP8266水位监测以及温湿度数据采集
  • 008二分答案+贪心判断——算法备赛
  • HDCP(二)
  • 爱普生TG-5510CA和TG-5510CB晶振成为服务器中的理想之选
  • SLAM文献之SuMa++: Efficient LiDAR-based Semantic SLAM
  • AI测试之Midscene.js
  • 英语单词 list 9
  • 图神经网络+多模态:视频动作分割的轻量高效新解法
  • Vue3的Composition API与React Hooks有什么异同?
  • 深度学习总结(6)
  • 皮质醇水平高低对健康的影响及科学建议
  • 【AI论文】GPT-4o图像生成能力的实证研究
  • DP主站如何华丽变身Modbus TCP网关!
  • 表格计算 | 第六届蓝桥杯国赛JavaB组
  • linux下io操作详细解析
  • Pandas分块读取技术:高效处理大数据的秘密武器
  • Mysql自动增长数据的操作(修改增长最大值)
  • go-zero学习笔记(六)---gozero中间件介绍
  • nacos配置达梦数据库驱动源代码步骤
  • 【Scrapy】Scrapy教程12——中间件