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 
linux下安装软件
8.让虚拟机上网:
         1.ifconfig
             查看网卡信息
         2.ping www.baidu.com
         
         3.将虚拟机设置为NAT模式:
            注意:
             NAT模式:windows有网,ubuntu也有网
             
             桥接模式:windows 和 ubuntu 网络独立 都有IP
             1.点击虚拟机
             2.点击设置
             3.点击网络适配器
             4.点击NAT模式
             5.点击确定
             
         4.配置ubuntu系统的ip地址为自动获取ip地址
             1.sudo vim /etc/network/interfaces
                 打开网卡配置文件
             2.修改文件内容
                 auto lo
                 iface lo inet lookback
                 
                 auto ens33
                 iface ens33 inet dhcp
             
             3.保存退出
             4.重启网络服务 
                 sudo /etc/init.d/networking restart
     
             5.测试是否联通
     
     9.apt-get工具集:
         1.让虚拟机上网
         
     
     
         2.执行命令:
             1.sudo apt-get autoclean
                 清除旧源
             2.sudo apt-get update
                 更新新源
             3.sudo apt-get install -f
                 重建软件源依赖关系
             4.安装软件
                 sudo apt-get install wireshark
                 安装wireshrak软件
                 
                 sudo apt-get install valgrind
                 安装valgrind内存泄露检测工具
                 
             5.卸载软件
                 sudo apt-get remove 软件名
             6.查看是否安装成功
              dpkg -1 软件名
             7.安装
                 sudo dokg -i 软件包名
IO
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 

ASCII码表 空格对应32
a 97 \0 对应0 0对应48







![[python]基于LSTR车道线实时检测onnx部署](https://img-blog.csdnimg.cn/direct/dd5fdf020fa24047a670682dc42cae9d.jpeg)











