嵌入式学习记录18

Linux软件编程:

1.Linux:

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

2.Shell:

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

 2.1 Shell基本命令:

        1.ls 
        2.cd 
        3.touch/rm 
        4.mkdir/rmdir 
        5.cp 
        6.mv 

 2.2 文件查看命令:

   1.cat 

             查看文件内容(字符):

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

             如:      .c .txt 文本文件

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

             如:       图片 视频 压缩包

 2.od -c 

  以字符或ASCII码形式显示文件内容

          示例:            od -c filename 

  3.head/tail 

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

  -n    指定显示的行数

如:

  head/tail filename 

  head/tail -n 行数 filename 

 2.3 文件查找命令:

   1.find

                    查找一个文件的路径 

  通配符:

            *:  匹配任意长度任意字符的文件名 
            ?:匹配一位长度任意字符的文件名
            [ ]:匹配一位长度指定字符的文件名

如:            [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 

2.4.重定向:

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

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

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

如:

            ls > file.txt              

            ls >> file.txt 

  2.5.管道:

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

如:

                    ps -ef | grep bash        

 2.6.其余命令:

        ps -ef          查看进程信息 

        echo            在终端打印内容        

        du -k/-m        测试文件大小            以kb  或  mb  的单元大小输出

  2.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 

  2.8.让虚拟机上网:

         1.ifconfig

                           查看网卡信息

         2.ping 网址(www.xxx.com)

                        看是否可以得到回应

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

【虚拟机的两种网络模式:

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

           桥接模式:Windows和Ubuntu网络独立    】

       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 

   2.9.apt-get工具集:

      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 

3.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可以在Windows或者Linux平台使用

                                              标准IO 需要通过shell 再通过缓存达到一定数量再一起进入内核

        文件IO是系统调用       系统调用:功能强大,应对复杂场景不够灵活

                                             文件IO只能在Linux系统平台使用

                                                文件IO是直接调用内核

5.标准IO:

 如: getchar putchar scanf printf gets puts

        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   (检查程序是否存在泄露)

fopen 后必须要有 fclose 否则会造成数据泄露;

  9.特殊的三个流:

        这三个是打开文件直接就存在的,不需要再次定义;不需要时可用close进行关闭;

         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.不缓存

                                         直接刷新

                        .  缓存区大小 0 k               stderr

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

         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

 注意:

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

        2.fputc只能写入字符


 

你可能感兴趣的:(学习,linux,运维)