嵌入式学习笔记Day18

今天正式进入linux高级编程的学习阶段

一、什么是linux?

linux是一种操作系统,其最重要的就是linux内核,现在很多操作系统都是基于linux内核进行设计的,linux内核是完全使用c语言进行编写,c语言代码具有高效的运行效率,所以基于linux内核的操作系统常常被用来作为服务器。linux内核的主要功能是:管理CPU,管理内存,管理硬件设备,管理文件系统,以及任务调度。
我们用户在使用linux时,并不能直接操作内核,而是通过shell去间接的操作内核,在这个过程中,shell链接用户和linux内核,防止小白或者误操作导致内核被破坏。同时它也作为一个命令解释器来解释用户的命令给内核。
shell命令有很多,我们在使用时可以通过man手册来查询。

二、shell命令

除了一些基础的shell指令,如:ls,cd,touch,mv,rm等等之外,今天主要学习了关于文件的相关指令。

 1.文件查看命令:
    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 

2.文件查找命令:
    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以外的字符

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

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

    3.grep 
      查找文件中内容 

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

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

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

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

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

    示例:
        ps -ef | grep bash 

5.其余命令:
    ps -ef          查看进程信息 
    echo            在终端打印内容
    du -k/-m        测试文件大小
    7.压缩解压命令:
    .tar.gz 
    .tar.bz2 

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

    2.解压命令:
        tar -zxvf 压缩文件包.tar.gz 
        tar -jxvf 压缩文件包名.tar.bz2 
  6.让虚拟机上网:
    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 

7.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编程

学习了一些文件操作的shell命令后,正式进入linux高级编程
首先是IO
IO表示输入和输出,主要的操作对象是各种文件,我们在终端输入ls -l指令后会显示出当前路径下各种文件的详细信息:
在这里插入图片描述
最开始的一列就是表示的文件类型,linux中主要有其中文件类型,b(block)块设备文件,c(character)字符设备文件,d(directory)目录文件,-(普通文件),l(link)链接文件,s(socket)套接字文件,p(pipe)管道文件
其中普通文件主要是ASSCII文件和二进制文件两种,ASCII码文件时特殊的二进制文件。
linux有两种IO,一个是标准IO,一个是文件IO:

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

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

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

标准IO一下接口函数:

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

我们要在文件中读写数据时有以下几步:
打开文件 -> 读写文件 -> 关闭文件
要使用标准io接口函数进行操作我们要了解文件流的概念
文件流(stream):流是我们在进行输入输出操作时的一种抽象概念,它具有以下特点:
1.具有方向性(读写)
2.具有连续性
3.具有顺序性

句柄:操作对象的一个抽象
有三个流我们每次在运行程序时都会后台默认进行:
stdin 标准输入流 从终端读取数据
stdout 标准输出流 向终端打印数据
stderr 标准出错流 向终端打印出错信息
我们可以使用fclose关闭这些流,当我们关闭stdout时,printf,putchar等输出函数就会失去作用。

另外学习了标准IO的缓冲机制

#include<stdio.h>
{
	printf("hello,world");
	while(1)
	{
	}
	return 0;
}

当我们运行程序时,会发现helloworld无法打印出来,这就是缓冲机制。
缓冲机制就是io接口函数在传输数据时并不会立刻就回将数据传输到内核进行执行,而时累计到一定量才进行传输。
有以下几种缓冲:

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

            与文件建立的缓存

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

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

            与终端建立的缓存            stdin   stdout 

        3.不缓存
            直接刷新
            缓存区大小 0k               stderr
            人机交互、界面控制、出错处理

我们也可以通过setvbuf函数来修改io的缓冲类型。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值