我要成为嵌入式高手之2月3日Linux高编第一天!!

学习框架

一、IO编程

        多任务编程(进程、线程)

        网络编程

        数据库编程

二、数据结构

学习笔记

Linux软件编程:

一. Linux

        1、Linux: 操作系统的内核,真正的操作系统叫Ubuntu、Redhat、CentOS.....

                内核(纯c实现的代码):管理CPU、内存、硬件设备、文件系统,进行任务调动

                系统调用:Linux内核当中的函数

                应用方向:1、服务器,2、嵌入式

        2、Shell:

                保护操作系统的内核(用户和Linux内核不直接操作)

                命令解释器的作用

        3、工作方式

                用户——>shell——>内核——>硬件设备——>让用户看到现象

 二、man手册(帮组手册)

        1.标准命令

        2.系统调用

        3.库函数

        4.设备说明

        5.文件格式

        6.娱乐

        7.杂项

        8.管理员命令

        command [ -options ] arg1    arg2.....

 三、Shell命令

        1、shell基本命令:ls cd  touch/rm  mkdir/rmdir cp mv

        2、通配符:

                1)*  :匹配任意长度任意字符的文件名

                2)?:匹配一位长度任意字符 ?.h  ???.h

                3)[ ] :  匹配一位指定字符的文件名[1,2,3,4]指定字符1 2 3 4

        3、文件查看命令:

               1) cat:以字符的形式查看文件(cat+文件名)

                        ASCII 码文件(文件内容均是能在终端显示的ASCII码字符)

                        二进制文件(文件内容不能够在终端显示,或者显示乱码)

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

                        示例:od -c filename

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

                     head -n 想看的前n行

                        示例:head filename

        4、文件查找命令

                1)find:查找一个文件在文件系统当中的路径

                                示例:find  文件夹  -name 文件名

                                可以搭配通配符使用

                2)whereis:查找指定内容的路径

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

                3)grep:查找文件中的内容

                                示例:grep 'printf'  stdio.h

          5、重定向:

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

                >>:追加重定向——在原来内容的基础之上追加新的内容

                >  :覆盖重定向——将原来的内容覆盖掉

                示例:

                        ls > file.txt

                        ls >> file.txt

        6、管道

                将前面命令 的输出作为后续命令的输入

                示例:

                        ps -ef | grep bash

        7、其余命令

                ps-ef :查看进程信息

                echo: 在终端上打印内容=printf

                    du: 测试文件大小(仅显示当层文件的大小,不包含下一层的文件)

                                du -k  du -m 按kb和mb测试

        练习:将/usr/include/stdio.h文件后200行中与extern相关的内容记录到file。txt文件中 

 

        8、压缩解压命令

                1)压缩命令:

                        tar -zcvf 压缩文件包名.tar.gz 文件夹名

                        tar -jcvf 压缩文件包名.tar.bz2 文件夹名

                2)解压命令:

                        tar -zxvf 压缩文件包名.tar.gz

                        tar -jxvf 压缩文件包名.tar.bz2

                示例:

                        tar -zcvf dir.tar.gz dir

                        .........

        9、让虚拟机上网:

                1)ifconfig:查看网卡信息

                2)ping:从主机向目的地址发送一个信息

                3)将虚拟机设置为NAT模式

                        NAT模式:Windows有网,Ubuntu就有网

                        桥接模式:Windows,Ubuntu都会使用网卡(Windows和Ubuntu网络独立)

                         

                4)配置Ubuntu系统的IP地址为自动获取IP地址

                        1、sudo vim /etc/network/interfaces

                                打开网卡配置文件,设置为

                                # interfaces(5) file used by ifup(8) and ifdown(8)
                                auto lo
                                iface lo inet loopback

                                auto ens33
                                iface ens33 inet dhcp

                        2、重启网络服务

                                sudo /etc/init.d/networking restart

                        3、测试与百度是否连通

                                ping www.baidu.com

                10、在虚拟机上下载软件

                        apt-get 工具集:

                        1)设置apt-get工具的源

                               设置software到“mirrors.aliyun.com”

                        2)执行命令

                                清楚旧源:sudo apt-get autoclean

                                更新新源:sudo apt-get update

                                重建软件园依赖工具:sudo apt-get install -f

                                安装软件:sudo apt-get install wireshark(安装wireshark)

                                                  sudo apt-get install valgrind(安装valgrind内存泄漏监测工具)

                                卸载软件:sudo apt-get remove 软件名

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

                                安装:sudo dpkg -i 软件包名

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:库函数—针对系统调用的封装,使用方便灵活—Windows、Linux

        文件IO:系统调用—功能强大,应用复杂场景不太灵活—Linux

5、标准IO:

        getchar /putchar /scanf /printf /gets /puts ->标准IO

        fopen / fclose

        fgetc / fputc

        fgets / fputs

        fscanf / fprintf

        fread / fwrite

        fseek / rewind / ftell

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

        打开文件 -> 读写文件 -> 关闭文件

        fopen         fgetc / fputc    fclose

                        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

例:

#include <stdio.h>

int main(void)
{
    FILE *fp = NULL;
    
    fp = fopen("a.txt","w+");
    if (NULL == fp)
    {
        printf("fopen failed!\n");
        return -1;
    }
    printf("fopen sucess!\n");

    return 0;
}

        2)fclose(具有free的功能)

                int fclose(FILE *stream);

                功能:关闭文件,释放文件流指针

                参数:stream文件流指针

                返回值:成功返回0;失败返回EOF(-1) 

                注意:

                        一个程序只能 fclose 一次

                        fopen 要和 fclose 成对打开

8、流:

        1)具有方向性(读写)

        2)具有连续性

        3)具有顺序性

       

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

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

9、特殊的三个流:

        stdin        标准输入流(从终端读取数据)

        stdout      标准输出流(往终端打印数据)

        stderr       标准出错流(往终端打印数据)

getchar 、scanf、gets 都是依赖于stdin来使用

未关闭: 

#include<stdio.h>

int main(void)
{
    //fclose(stdin);
    //fclose(stdout);
    //fclose(stderr);

    getchar();
    printf("hello world!\n");
    perror("hello world!\n");

    return 0;
}

 

已关闭: 

#include<stdio.h>

int main(void)
{
    fclose(stdin);
    fclose(stdout);
    fclose(stderr);

    getchar();
    printf("hello world!\n");
    perror("hello world!\n");

    return 0;
}

10、标准IO缓存(读写的时候才会有缓存)

        缓存分为三类:

                1)全缓存(缓存区满刷新),一般与文件建立的缓存

                        ①缓存区存满刷新(全缓存大小:4096_4k)

                        ②fflush函数强制刷新

                        ③程序结束刷新

                

                2)行缓存(遇到 \n 刷新),一般与终端建立的缓存 (stdin、stdout)

                        ①缓存区存满刷新(行缓存大小:1024_1k)

                        ②遇到 \n 刷新

                        ③fflush函数强制刷新

                        ④程序结束刷新 / fclose刷新

                3)不缓存(stderr)多用于人机交互、界面控制、出错处理

                        直接刷新(0k)

                4)setvbuf修改缓存

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

11、fputc
        int fputc(int c, FILE *stream);   

        功能:
                向流中写入一个字符
         参数:
                c:写入字符的ASCII码值
                stream:文件流指针 
        返回值:
                成功返回写入字符的ASCII码值
                失败返回EOF

        注意:

        fputc只能写入一个字符,写入多个字符需要多次调用

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pdmodel从动态模型转成静态onnx

1.下载项目 git clone https://github.com/jiangjiajun/PaddleUtils.git 2.新建两个新的文件夹 第一个文件夹放两个必要文件 第二个文件夹可以设置为空&#xff0c;用来存放转换后的模型 如图&#xff1a; 3.在终端运行 python paddle/paddle_infer_shape.py --model_dir …

DevOps落地笔记-10|环境管理:交付测试环境的迅猛方法

上一讲我主要介绍在开发过程中如何处理应用程序在不同环境的配置问题&#xff0c;通过有效管理应用程序的配置&#xff0c;最终实现一包到底。不同的环境不仅会带来应用程序本身的配置管理问题&#xff0c;环境本身的创建、管理、一致性等问题也需要解决。环境管理的问题也是我…

在jetbrains IDEA/Pycharm/Android Studio中安装官方rust插件,开始rust编程

在idea插件市场搜索rust&#xff1a;JetBrains Marketplace &#xff0c;就可以找到rust插件&#xff1a; jetbrains官方rust插件地址&#xff1a;[Deprecated] Rust - IntelliJ IDEs Plugin | Marketplace 直接在idea中搜索rust好像是搜不到的&#xff1a; 需要在这个插件市场…

Nginx简单阐述及安装配置

目录 一.什么是Nginx 二.Nginx优缺点 1.优点 2.缺点 三.正向代理与反向代理 1.正向代理 2.反向代理 四.安装配置 1.添加Nginx官方yum源 2.使用yum安装Nginx 3.配置防火墙 4.启动后效果 一.什么是Nginx Nginx&#xff08;“engine x”&#xff09;是一个高性能的HTTP…

Python3 交叉编译 numpy pandas scipy scikit-learn

1. 概述 由于需要将Python3.7 和一些软件包交叉编译到 armv7 平台硬件&#xff0c;如果是arm64位的系统&#xff0c;很多包都有预编译好的版本&#xff0c;可直接下载。本文主要在基于 crossenv(https://github.com/benfogle/crossenv)环境下交叉编译。 2. 编译环境搭建 创建…

自编C++题目——水龙头

预估难度 简单 题目描述 有个水龙头&#xff0c;其中有一些坏了的&#xff08;用表示&#xff09;&#xff0c;还有一些能用的&#xff08;用表示&#xff09;&#xff0c;那么有多少个能用的&#xff1f; 输入格式 第一行&#xff1a;整数&#xff0c;表示水龙头的个数&a…

SpringBoot 解决 getReader() has already been called for this request

一、getReader()问题分析 1、获取请求参数的方式 对于 GET 请求和 POST 表单请求&#xff0c;参数都是包含在 URL 查询字符串中的&#xff0c;因此在拦截器中都可以通过使用 request.getParameter(“paramName”)来获取这些参数。 对于 POST JSON 请求&#xff0c;参数通常包…

【Vue】mvc,mvp,mvvm 的区别

总结&#xff1a; MVC : view 视图层依靠 model 来进行更新渲染&#xff0c;当数据发生改变时。第一步: 通知 controller 进行更新&#xff0c;然后第二步 controller 再通知 model 进行更新。最后 model 才将 view 更新 , 这样大量的逻辑以及更新操作&#xff0c;都需要在con…

2024.2.3每日一题

LeetCode 石子游戏 VII 1690. 石子游戏 VII - 力扣&#xff08;LeetCode&#xff09; 题目描述 石子游戏中&#xff0c;爱丽丝和鲍勃轮流进行自己的回合&#xff0c;爱丽丝先开始 。 有 n 块石子排成一排。每个玩家的回合中&#xff0c;可以从行中 移除 最左边的石头或最右…

【已更新】2024美赛C题代码教学思路数据处理数学建模分析Momentum in Tennis

问题一完整的代码已给出&#xff0c;预计2号晚上或者3号凌晨全部给出。 代码逻辑如下&#xff1a; C题第一问要求我们开发一个模型&#xff0c;捕捉得分时的比赛流程&#xff0c;并将其应用于一场或多场比赛。你的模型应该确定哪名球员在比赛的特定时间表现得更好&#xff0c;…

C系列-动态内存管理

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 为什么要有动态内存分配 malloc和free malloc free calloc和realloc calloc realloc 常见的动态内存的错误 对NULL指针的解引用操作 ​编辑 对动态开辟空间的越界访问…

Three.js学习3:第一个Three.js页面

一、一图看懂Three.js 坐标 这个没什么好说的&#xff0c;只是需要注意颜色。在 Three.js 提供的编辑器中&#xff0c;各种物体的坐标也这样的色彩&#xff1a; 红色&#xff1a;x 轴 绿色&#xff1a;y 轴 蓝色&#xff1a;z 轴 Three.js 提供的编辑器可以在本地 Three.js …

python算法与数据结构(搜索算法和拓扑排序算法)---广度优先搜索和拓扑排序

广度优先搜索BFS 定义&基本内容 广度优先是按照层次由近及远的进行搜索&#xff0c;在当前层次所有可及节点都搜索完毕后才会继续往下搜索&#xff0c;其本质就是寻找从起点到终点的最短路程。 树的广度优先搜索 树的广度优先遍历&#xff0c;可以看成是层序遍历。 访问…

java数据结构与算法刷题-----LeetCode15. 三数之和

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 和LeetCode1.两数之和一样&#xff0c;但是这道题边界条件更多。…

基于协同过滤的个性化电影推荐系统分析设计python+flask

本系统为用户而设计制作个性化电影推荐管理&#xff0c;旨在实现个性化电影推荐智能化、现代化管理。本个性化电影推荐自动化系统的开发和研制的最终目的是将个性化电影推荐的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的便利…

2401Idea用GradleKotlin编译Java控制台中文出乱码解决

解决方法 解决方法1 在项目 build.gradle.kts 文件中加入 tasks.withType<JavaCompile> {options.encoding "UTF-8" } tasks.withType<JavaExec> {systemProperty("file.encoding", "utf-8") }经测试, 只加 tasks.withType<…

谷粒商城【成神路】-【4】——分类维护

目录 1.删除功能的实现 2.新增功能的实现 3.修改功能的实现 4.拖拽功能 1.删除功能的实现 1.1逻辑删除 逻辑删除&#xff1a;不删除数据库中真实的数据&#xff0c;用指定字段&#xff0c;显示的表示是否删除 1.在application.yml中加入配置 mybatis-plus:global-config:…

俩种方法解决 VScode中 NPM 脚本消失,NPM 脚本未显示在资源管理器侧栏中

npm脚本是npm包管理器的一个功能&#xff0c;允许开发者在package.json文件中定义一系列命令脚本&#xff0c;用于执行各种开发任务。 今天打开准备运行的时候发现找不到NPM脚本了&#xff0c;左侧的一栏完全没有显示&#xff0c;在网上查阅了很多资料后总结出俩个方法可以用来…

寒假作业2月3号

第二章 引用内联重载 一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句 C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句…

解密二进制世界:Hex-Rays IDA Pro forMac/win交互式反汇编工具

在当今数字化时代&#xff0c;软件和硬件的安全性成为了重中之重。为了保护软件和硬件免受黑客和恶意攻击的威胁&#xff0c;人们需要了解和分析代码的内部结构和工作原理。而Hex-Rays IDA Pro作为一款强大的交互式反汇编工具&#xff0c;为安全专业人士提供了解密二进制世界的…