嵌入式学习第十六天!(Linux文件查看、查找命令、标准IO)

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码字符)(.txt、.c文本文件)

            二进制文件(文件内容不能够再终端显示,或者显示乱码)(图片、视频、压缩包)

        2. od -c:以字符或ASCll码形式显示文件内容
od -c filename
        3. head/tail:查看文件开头/末尾内容(默认10行)

            -n  指定显示的行数

head/tail filename
head/tail -n 行数 filename

    3. 文件查找命令:

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

            通配符:

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

                ?:匹配一位长度任意字符的文件名

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

                [1,2,3,4] 指定字符1 2 3 4

                [1-4] 指定字符 1 2 3 4

                [^2] 指定除了2以外的字符

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

            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 -f    #查看进程信息
echo     #在终端打印内容
du -k/-m #测试文件大小

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

tail -n 200 /usr/include/stdio.h | grap 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

            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

ifconfig            #1. 查看网卡信息ping www.baidu.com  #2. 向百度发送信号
                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. ASCll文件

        文件中所有的字符均为能够在终端上显示的字符(文本文件、程序.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. 从文件中读写数据的流程:

1. 打开文件2. 读写文件3. 关闭文件
fopenfgetc/fputcfclose
fgets/fputs
fscanf/fprintf
fread/fwrite

7. 函数接口

    1. fopen
FILE *fopen(const char *pathname, const char *mode);
        1. 功能:打开pathname对应的文件并与其建立一个文件流
        2. 参数:

            pathname:要打开文件路径的字符串
            mode:

r只读文件不存在报错,文件存在只读打开
r+读写文件不存在报错,文件存在读写打开
w只写文件不存在创建,文件存在将文件内容清空,只写打开
w+写读文件不存在创建,文件存在将文件内容清空,写读打开
a追加只写文件不存在创建,文件存在追加只写打开
a+追加写读文件不存在创建,文件存在追加写读打开
        3. 返回值:

            成功返回打开的文件流指针
            失败返回NULL

    2. fclose
int fclose(FILE *stream);
        1. 功能:关闭文,释放文件流指针
        2. 参数:

            stream:文件流指针

        3. 返回值:

            成功返回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缓存:

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);

        1. 功能:改变一个流的缓存类型

        2. 参数:

            stream:文件流指针
            buf:指定缓存空间的首地址
            mode:
                _IONBF  不缓存
                _IOLBF  行缓存
                _IOFBF  全缓存
            size:
                设定缓存区的大小

        3. 返回值:

            成功返回0 
            失败返回非0 

11. fputc

int fputc(int c, FILE *stream);
    1. 功能:向流中写入一个字符
    2. 参数:

        c:写入字符的ASCII码值
        stream:文件流指针 

    3. 返回值:

        成功返回写入字符的ASCII码值
        失败返回EOF

    注意:

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

作业:

        1.利用fputc向文件file.txt中写入字符串"hello world"

#include <stdio.h>int main(void)
{FILE *fp = NULL;char tmptbuffer[32] = {"Hello World"};char *pstr = NULL;fp = fopen("file.txt", "w");if(fp == NULL){perror("fopen failed");return -1;}pstr = tmptbuffer;while(*pstr != '\0'){	fputc(*pstr, fp);pstr++;}fclose(fp);return 0;
}

        2.搜索fgetc的功能,参数,返回值含义,实现读取文件中所有的内容并显示在界面上

#include <stdio.h>int main(void)
{FILE *fp = NULL;char ch = 0;fp = fopen("file.txt", "r+");if(fp == NULL){return -1;}while((ch =fgetc(fp)) != EOF){putchar(ch);}return 0;
}

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

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

相关文章

idea常用设置

1、内存优化 根据自己电脑本身的内存&#xff0c;对idea安装包里bin目录下的idea64.exe.vmoptions文件进行修改 -server -Xms256m -Xmx2048m -XX:MaxPermSize1024m -XX:ReservedCodeCacheSize256m -ea -Dsun.io.useCanonCachesfalse -Djava.Net.preferIPv4Stacktrue -Djsse.e…

2024 极术通讯-安谋科技2023精彩征程回顾

导读&#xff1a;极术社区推出极术通讯&#xff0c;引入行业媒体和技术社区、咨询机构优质内容&#xff0c;定期分享产业技术趋势与市场应用热点。 芯方向 使用 Arm SPE 进行芯片数据采集和性能分析 Arm Statistical Profiling Extension (SPE, 统计分析扩展) 是一种架构级功…

CSS:水平垂直居中

公共的 CSS 样式&#xff1a; .parent {width: 300px;height: 300px;background-color:#d0e4fe; }.child {width: 100px;height: 100px;background-color:orange; }HTML: <div class"parent"><div class"child"></div> </div>最…

docker-compose部署laravel项目实战(主机nginx连接项目容器)(详细配置过程)

我用的是主机上的nginx,没有用docker安装nginx&#xff0c; 所以需要先在主机上安装nginx # 更新系统yum sudo yum update# 安装安装包sudo yum install epel-release sudo yum install wget# 安装Nginx sudo yum install nginx #启动 sudo systemctl start nginx #开机自启动…

Centos7配置登录失败处理导致root被锁定处理办法

1、应用场景 root用户被系统锁定&#xff0c;无法登录系统。 2、问题现象 root锁定无法登录系统 3、原因 设置登录失败处理并对root用户生效&#xff0c;一直尝试错误的root密码或暴力破解root密码&#xff0c;导致无法自动解锁Linux的root账户 4、解决方案 1.将虚拟机开…

什么是java程序的主类,应用程序主类和小程序主类有什么不同?

在Java中&#xff0c;主类&#xff08;Main Class&#xff09;通常指的是包含main方法的类&#xff0c;这个方法是Java程序的入口点。在Java应用程序中&#xff0c;有两种主要的主类概念&#xff0c;分别是应用程序主类和小程序主类。 1. Java应用程序主类&#xff08;Applica…

gerrit(2) | 为什么使用 gerrit

gerrit(2) | 为什么使用 gerrit 本文以 Use Gerrit to Be a Rockstar Programmer 的翻译为基础&#xff0c; 增加一点个人笔记。 依照惯例&#xff0c; 中文的括号里是个人的粗浅看法。 概要 (Overview) The term rockstar is often used to describe those talented progra…

新版MQL语言程序设计:外观模式的原理、应用及代码实现

文章目录 一、什么是外观模式二、外观模式的实现原理三、外观模式的应用范围四、外观模式应用实例银行系统的设计量化交易系统的设计 五、外观模式的代码实现 一、什么是外观模式 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个…

parameter ‘MAX_BYTE‘ used as named parameter override, is a localparam

在驱动模块里把常量定义的 localparam, 然后在顶层文件里面做了修改报错。改成parameter解决 1. localparam在模块内部使用且不能实例化&#xff0c;parameter才可以在实例化的时候修改参数 2. 常量如果在顶层模块和其他模块的值不一样&#xff0c;会使用顶层模块里面的值…

机器学习中的有监督学习和无监督学习

有监督学习 简单来说&#xff0c;就是人教会计算机学会做一件事。 给算法一个数据集&#xff0c;其中数据集中包含了正确答案&#xff0c;根据这个数据集&#xff0c;可以对额外的数据希望得到一个正确判断&#xff08;详见下面的例子&#xff09; 回归问题 例如现在有一个…

[SWPUCTF 2021 新生赛]easyupload1.0

发现是上传文件第一想到是文件木马 <?php eval ($_POST[123]);?>木马上传burp修改后缀发现flag里面这个是假的 我们猜想是在phpinfo我们上传<?php eval(phpinfo(););?>木马上传burp修改后缀里面 CtrlF 发现flag

AI智能电销机器人有哪方面的技术优势?

随着科学技术的发展&#xff0c;人工智能逐渐进入了公众的视野&#xff0c;与人工智能相关的智能产品&#xff0c;也从工业革命的诞生开始在生活中不断涌现&#xff0c;虽然说人类没有被机器所取代&#xff0c;但在之后的人工智能时代&#xff0c;人类真的会被取代吗&#xff1…

Linux文件编译

一、GCC编译 我们都知道想要实现一个程序首先需要写好代码让其能运行起来&#xff0c;那么写出来的.c文件是如何被编译出来的呢&#xff1f; 1.直接编译 首先将程序直接编译为可执行文件可以通过Linux中的GCC编译器。 GCC&#xff08;是一套广泛使用的编译器工具集&#xff…

读论文:DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior

DiffBIR 发表于2023年的ICCV&#xff0c;是一种基于生成扩散先验的盲图像恢复模型。它通过两个阶段的处理来去除图像的退化&#xff0c;并细化图像的细节。DiffBIR 的优势在于提供高质量的图像恢复结果&#xff0c;并且具有灵活的参数设置&#xff0c;可以在保真度和质量之间进…

[office] sumifs函数和sump #媒体#学习roduct哪个运算更快--Excel函数 #职场发展#媒体

sumifs函数和sumproduct哪个运算更快?-Excel函数 今天&#xff0c;我了解到Excel报表需求看起来像这样&#xff1a; Excel数据库中将维护大约150,000行数据。会有数十个报告&#xff0c;每个报告都有数百种不同的过滤器设置。&#xff08;不同的产品&#xff0c;部门等&…

解决The Tomcat connector configured to listen on port 8080 failed to start

问题 启动javar报错&#xff0c;提示如下 Description: The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured. Action: Verify the connector’s configuration, identify a…

【论文笔记】Lift-Attend-Splat: Bird’s-eye-view camera-lidar fusion using transformers

原文链接&#xff1a;https://arxiv.org/abs/2312.14919 1. 引言 多模态融合时&#xff0c;由于不同模态有不同的过拟合和泛化能力&#xff0c;联合训练不同模态可能会导致弱模态的不充分利用&#xff0c;甚至会导致比单一模态方法性能更低。 目前的相机-激光雷达融合方法多基…

【JMeter】使用技巧

在这此对新版本jmeter的学习温习的过程&#xff0c;发现了一些以前不知道的功能&#xff0c;所以&#xff0c;整理出来与大分享。本文内容如下。 如何使用英文界面的jmeter如何使用镜像服务器Jmeter分布式测试启动Debug 日志记录搜索功能线程之间传递变量 如何使用英文界面的…

Vite 的全景:颠覆前端开发的新潮流

Vite 的全景:颠覆前端开发的新潮流 1. 简介 在现代前端开发领域,Vite已经成为一种引人注目的选择。Vite是一种快速、简单、可扩展的构建工具,为前端开发者提供了高效的开发体验。让我们一起深入了解这个令人兴奋的技术。 1.1 定义和概述 Vite是一个基于Vue.js的构建工具…

YOLO部署实战(5):NVIDIA Jetson Tx2部署YOLO

1 一些概念 Jetson Tx2 NVIDIA Jetson 是NVIDIA为新一代自主机器设计的的嵌入式系统&#xff0c;是一个AI平台&#xff0c;它的优势就是可以覆盖不同领域、不同行业。目前Jetson产品线已经有四个产品系列&#xff0c;包括Jetson Nano、Jetson TX2、Xavier NX和AGX Xavier。四…