嵌入式学习 Day18

Linux软件编程:

1.Linux:

操作系统的内核
        1.管理CPU
        2.管理内存
        3.管理硬件设备
        4.管理文件系统
        5.任务调度

2.Shell:


    1.保护Linux内核(用户和Linux内核不直接操作,通过操作Shell,Shell和内核交互)
    2.命令解释器

3.Shell命令: 


        man 手册(帮助手册)
        1.标准命令
        2.系统调用
        3.库函数
        4.设备说明
        5.文件格式
        6.娱乐
        7.杂项
        8.管理员命令

        command [-options] arg1 arg2 .. 

    1.Shell基本命令:
        1.ls 
        2.cd 
        3.touch/rm 
        4.mkdir/rmdir 
        5.cp 
        6.mv 

    2.文件查看命令:
        1.cat 
          查看文件内容(字符)

          ASCII码文件(文件内容均是能在终端显示的ASCII码字符)
                .c .txt 文本文件
          二进制文件(文件内容不能够在终端显示,或者显示乱码)
                图片 视频 压缩包

          示例:
            cat filename 

        2.od -c 
          以字符或ASCII码形式显示文件内容 

          示例:
            od -c filename 


        3.head/tail 
          查看文件开头/末尾内容(默认10行)

          -n    指定显示的行数

          示例:
            head/tail filename 
            head/tail -n 行数 filename 

    3.文件查找命令:
        1.find
          查找一个文件的路径 

          示例:
            find 文件夹 -name 文件名 
            find . -name '*.txt' 
            find . -name '??.txt' 
            find . -name '[1,2,3,4][1,2,3,4].txt' 

        通配符:
            *:匹配任意长度任意字符的文件名 
            ?:匹配一位长度任意字符的文件名
            []:匹配一位长度指定字符的文件名
            [1, 2, 3, 4] 指定字符 1 2 3 4
            [1-4] 指定字符 1 2 3 4
            [^2] 指定除了2以外的字符

        2.whereis 
          查找指定内容的路径 

          示例:
            whereis 二进制程序名/软件名

        3.grep 
          查找文件中内容 

          示例:
            grep 'printf' /usr/include/stdio.h 

    4.重定向:
        将原本要输出在终端的内容重定向到一个文件中

        >>  追加重定向      在原来内容基础上追加新的内容
        >   覆盖重定向      将原来的内容覆盖掉

        示例:
            ls > file.txt 
            ls >> file.txt 

    5.管道:
        将前面命令的输出作为后续命令的输入

        示例:
            ps -ef | grep bash 


    6.其余命令:
        ps -ef          查看进程信息 
        echo            在终端打印内容
        du -k/-m        测试文件大小
        
    练习:一条shell命令,将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file.txt文件中
        tail -n 200 /usr/include/stdio.h | grep 'extern' > file.txt 

    7.压缩解压命令:
        .tar.gz 
        .tar.bz2 

        1.压缩命令:
            tar -zcvf 压缩文件包名.tar.gz 文件夹
            tar -jcvf 压缩文件包名.tar.bz2 文件夹

        2.解压命令:
            tar -zxvf 压缩文件包.tar.gz 
            tar -jxvf 压缩文件包名.tar.bz2 

        示例:
            tar -zcvf dir.tar.gz dir 
            tar -jcvf dir.tar.bz2 dir 

            tar -zxvf dir.tar.gz 
            tar -jxvf dir.tar.bz2 

    8.让虚拟机上网:
        1.ifconfig
          查看网卡信息

        2.ping www.baidu.com 
            64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=1 ttl=51 time=32.7 ms
            64 bytes from 183.2.172.185 (183.2.172.185): icmp_seq=2 ttl=51 time=32.7 ms

        3.将虚拟机设置为NAT模式:


            NAT模式:Windows有网,Ubuntu就有网
            桥接模式:Windows和Ubuntu网络独立

            1.点击"虚拟机"
            2.点击"设置"
            3.点击"网络适配器"
            4.选择"NAT模式"
            5.点击"确定"
        
        4.配置Ubuntu系统的IP地址为自动获取IP地址
            1.sudo vim /etc/network/interfaces
              打开网卡配置文件
            
            2.修改文件内容为:
                auto lo 
                iface lo inet loopback 

                auto ens33 
                iface ens33 inet dhcp 

            3.保存退出
                ESC
                :wq
            
            4.重启网络服务
                sudo /etc/init.d/networking restart 

        5.测试与百度是否连通
            ping www.baidu.com 

    9.apt-get工具集:
            1.自动下载软件
            2.能够分析软件的依赖关系

        1.设置apt-get工具的源:
            1.让虚拟机上网
            2.在Ubuntu左侧找到"Ubuntu Software"
            3.在Ubuntu上方找到"Ubuntu Software" 右键选择"Software & Updates"
            4.DownLoad Form 选择 "Others" -> "China" -> "mirrors.aliyun.com"
            
        2.执行命令:
            1.sudo apt-get autoclean
                清除旧源
            2.sudo apt-get update 
                更新新源
            3.sudo apt-get install -f 
                重建软件源依赖关系
            4.安装软件
                sudo apt-get install wireshark 
                安装Wireshark软件

                sudo apt-get install valgrind 
                安装valgrind内存泄露检测工具
            5.卸载软件
                sudo apt-get remove 软件名 

            6.查看是否安装成功
                dpkg -l 软件名

            7.安装
                sudo dpkg -i 软件包名.deb 


IO:


    1.IO输入输出

       操作对象是文件


    2.Linux文件类型:


        b   block       块设备文件
                        按块扫描设备信息的文件
                        存储设备

        c   character   字符设备文件
                        按字符扫描设备信息的文件 

        d   directory   目录文件 
                        存放文件

        -               普通文件 
                        存放数据
                        图片、音视频、压缩包、文本文件

        l   link        链接文件 
                        快捷方式

        s   socket      套接字文件
                        用来套接字通信

        p   pipe        管道文件
                        用来进程间通信

    3.普通文件:


        1.ASCII码文件
            文件中所有的字符均为能够在终端上显示的字符
            文本文件、程序.c 
        2.二进制文件
            文件中存放数据的二进制形式
            图片、音视频、压缩包 

        注意:ASCII码文件是特殊的二进制文件

    4.标准IO、文件IO


        标准IO是库函数
        文件IO是系统调用

        系统调用:功能强大,应对复杂场景不够灵活
        库函数:针对系统调用的封装,使用方便灵活

        标准IO可以在Windows或者Linux平台使用
        文件IO只能在Linux系统平台使用

    5.标准IO:
        getchar putchar scanf printf gets puts  -> 标准IO

        #include <stdio.h>

        fopen/fclose 
        fgetc/fputc 
        fgets/fputs
        fscanf/fprintf
        fread/fwrite 
        fseek/rewind/ftell 

    6.从文件中读写数据的流程:


        打开文件 -> 读写文件 -> 关闭文件
        fopen                                fclose
                         fgetc/fputc        单个字符的读写
                         fgets/fputs        字符串的读写
                         fscanf/fprintf     格式化字符串的读写
                         fread/fwrite       二进制文件的读写

    7.函数接口:


        1.fopen


          FILE *fopen(const char *pathname, const char *mode);
          功能:
            打开pathname对应的文件并与其建立一个文件流
          参数:
            pathname:要打开文件路径的字符串
            mode:
                r       只读            文件不存在报错,文件存在只读打开
                r+      读写            文件不存在报错,文件存在读写打开
                w       只写            文件不存在创建,文件存在将文件内容清空,只写打开
                w+      写读            文件不存在创建,文件存在将文件内容清空,写读打开
                a       追加只写        文件不存在创建,文件存在追加只写打开
                a+      追加写读        文件不存在创建,文件存在追加写读打开
          返回值:
              成功返回打开的文件流指针
              失败返回NULL

        2.fclose 


          int fclose(FILE *stream);
          功能:
            关闭文件,释放文件流指针
          参数:
            stream:文件流指针
          返回值:
            成功返回0 
            失败返回EOF(-1)


    8.文件流:


        1.具有方向性(读写)
        2.具有连续性
        3.具有顺序性

        句柄:操作对象的一个抽象

        valgrind --tool=memcheck --leak-check=full ./a.out

    9.特殊的三个流:


        stdin   标准输入流          从终端读取数据
        stdout  标准输出流          向终端打印数据
        stderr  标准出错流          向终端打印数据 

        getchar、scanf、gets 通过stdin来读取终端数据
        putchar、printf、puts通过stdout来向终端输出数据
        perror通过stderr来向终端输出数据

    10.标准IO缓存: 缓存分为3类:


            1.全缓存  4k
                缓存区满刷新
                
                刷新条件:
                    1.缓存区存满刷新(全缓存大小:4096)
                    2.fflush函数强制刷新
                    3.程序结束/fclose刷新

                与文件建立的缓存

            2.行缓存  1k
                遇到\n刷新  

                刷新条件:
                    1.缓存区存满刷新(行缓存大小:1024)
                    2.遇到\n刷新 
                    3.fflush函数强制刷新
                    4.程序结束/fclose刷新

                与终端建立的缓存            stdin   stdout 

            3.不缓存
                直接刷新

                缓存区大小 0k               stderr

                人机交互、界面控制、出错处理

            4.setvbuf
              int setvbuf(FILE *stream, char *buf, int mode, size_t size);
              功能:
                改变一个流的缓存类型
              参数:
                stream:文件流指针
                buf:指定缓存空间的首地址
                mode:
                    _IONBF  不缓存
                    _IOLBF  行缓存
                    _IOFBF  全缓存
                size:
                    设定缓存区的大小
              返回值:
                成功返回0 
                失败返回非0 

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

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

相关文章

STM32--SPI通信协议(2)W25Q64简介

一、W25Q64简介 1、W25Qxx中的xx是不同的数字&#xff0c;表示了这个芯片不同的存储容量&#xff1b; 2、存储器分为易失性与非易失性&#xff0c;主要区别是存储的数据是否是掉电不丢失&#xff1a; 易失性存储器&#xff1a;SRAM、DRAM&#xff1b; 非易失性存储器&#xff…

红队渗透靶机:LORD OF THE ROOT: 1.0.1

目录 信息收集 1、arp 2、nmap 3、knock 4、nikto 目录探测 1、gobuster 2、dirsearch WEB sqlmap 爆库 爆表 爆列 爆字段 hydra爆破 ssh登录 提权 信息收集 内核提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, ty…

参考数据集INRIA Holidays dataset

Download datasets 很贴心,MATLAB访问代码: % This function reads a siftgeo binary file % % Usage: [v, meta] = siftgeo_read (filename, maxdes) % filename the input filename % maxdes maximum number of descriptors to be loaded % (default=unlimit…

【微服务】Spring Boot集成ELK实用案例

推荐一款我一直在用国内很火的AI网站&#xff0c;包含GPT3.5/4.0、文心一言、通义千问、智谱AI等多个AI模型&#xff0c;支持PC、APP、VScode插件同步使用&#xff0c;点击链接跳转->ChatGPT4.0中文版 一、前言 在现代软件开发中&#xff0c;微服务架构已成为一种流行趋势。…

1 月 30 日算法练习-数论

唯一分解定理 唯一分解定理指的是&#xff1a;对于任意一个>1的正整数&#xff0c;都可以以唯一的一种方式分解为若干质因数的乘积。 x p 1 k 1 ⋅ p 2 k 2 ⋅ … ⋅ p m k m x p_1^{k_1} \cdot p_2^{k_2} \cdot \ldots \cdot p_m^{k_m} xp1k1​​⋅p2k2​​⋅…⋅pmkm​…

Kubernetes集群搭建

一、概述 Kubernetes是一个Google开源的全新的分布式容器集群管理系统&#xff0c;由于从第一个字母到字母s中间有8个字母&#xff0c;所以简称K8s。 二、准备 ip角色内存192.168.187.130master4G192.168.187.131node2G192.168.187.132node2G 小提示&#xff1a; 设置静态i…

信号传输中串扰的影响.

1.导线间的串扰 当导线之间发生串扰时,一根导线上的信号会影响到另一根信号线,给连接的电路造成干扰。这种现象通常发生在平行的导线之间。在设计设备的布线时,特别要注意低电平模拟信号的传输问题。附近导线对其的串扰常常是系统性能下降的主要原因。因此在布线设计时,必须…

seq2seq编码器-解码器实现

我们在之前的文章快速上手LSTM-CSDN博客中提及了RNN的几种不同的类型&#xff0c;其中有同步的 many to many 的根据视频的每一帧对视频分类任务&#xff0c;以及异步的 many to many 文本翻译。对于这种输入和输出不等长的序列&#xff0c;我们采用seq2seq&#xff08;sequenc…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步&#xff1a;环境搭建第二步&#xff1a;了解React基础第三步&#xff1a;组件与路由第四步&#xff1a;状态管理第五步&#xff1a;接口与数据交互第六步&#xff1a;样式与布局第七步&#xff1a;测试第八步&#xff1a;构建与部署《深入浅出React开发指南》内…

【面试官问】Redis 持久化

目录 【面试官问】Redis 持久化 Redis 持久化的方式RDB(Redis DataBase)AOF(Append Only File)混合持久化:RDB + AOF 混合方式的持久化持久化最佳方式控制持久化开关主从部署使用混合持久化使用配置更高的机器参考文章所属专区

React 面试题

1、组件通信的方式 父组件传子组件&#xff1a;通过props 的方式 子组件传父组件&#xff1a;父组件将自身函数传入&#xff0c;子组件调用该函数&#xff0c;父组件在函数中拿到子组件传递的数据 兄弟组件通信&#xff1a;找到共同的父节点&#xff0c;用父节点转发进行通信 …

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件&#xff0c;想要提取其中的音频却苦于没有合适的工具&#xff1f;现在&#xff0c;有了我们的全新视频剪辑工具&#xff0c;这个烦恼全部消失&#xff01;我们为你提供一键式解决方案&#xff0c;将MOV视频文件快速转换为MP3音频格式。 首先…

基于单片机的造纸纸浆液位控制系统结构设计

摘要:为适应无人化与高效化制浆造纸生产体系&#xff0c;造纸企业趋于以嵌入式技术优化造纸过 程中的纸浆液位控制系统&#xff0c;以单片机与传感器相互耦合实现纸浆液位控制。本文基于单片机 设计了造纸纸浆液位控制系统&#xff0c;其结构由控制模块、信息采集模块、物联网模…

备战蓝桥杯---搜索(应用入门)

话不多说&#xff0c;直接看题&#xff1a; 显然&#xff0c;我们可以用BFS&#xff0c;其中&#xff0c;对于判重操作&#xff0c;我们可以把这矩阵化成字符串的形式再用map去存&#xff0c;用a数组去重现字符串&#xff08;相当于map映射的反向操作&#xff09;。移动空格先找…

JVM之Java内存区域

JVM-Java内存区域 Java内存区域是Java虚拟机&#xff08;JVM&#xff09;管理的内存资源的逻辑划分&#xff0c;用于存储程序运行时所需的数据。Java内存区域的合理划分和管理对于程序的性能和稳定性具有重要影响。本文将深入探讨Java内存区域的各个部分&#xff0c;包括方法区…

vit细粒度图像分类(九)RAMS-Trans学习笔记

1.摘要 在细粒度图像识别(FGIR)中&#xff0c;区域注意力的定位和放大是一个重要因素&#xff0c;基于卷积神经网络(cnn)的方法对此进行了大量探索。近年来发展起来的视觉变压器(ViT)在计算机视觉任务中取得了可喜的成果。与cnn相比&#xff0c;图像序列化是一种全新的方式。然…

npm ERR! code CERT_HAS_EXPIRED

执行npm i报错&#xff1a; npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/react-redux failed, reason: connect ETIMEDOUT 104.16.2.35:443 npm ERR! network This is a problem rel…

使用ESP32-S3对MQ-135空气质量传感器的使用记录(Arduino版)

一、硬件上&#xff1a; 1、使用esp32开发板的04引脚与AO连接&#xff0c;检测AO引脚的电平 二、软件上&#xff1a; 1、使用Arduino快速完成开发 2、源码&#xff1a; // Potentiometer is connected to GPIO 04 (Analog ADC1_CH3) const int adcPin 4;// variable for s…

十大排序算法之堆排序

堆排序 在简单选择排序文章中&#xff0c;简单选择排序这个“铁憨憨”只顾着自己做比较&#xff0c;并没有将对比较结果进行保存&#xff0c;因此只能一遍遍地重复相同的比较操作&#xff0c;降低了效率。针对这样的操作&#xff0c;Robertw.Floyd 在1964年提出了简单选择排序…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…