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

news2024/9/21 22:29:15

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.coloradmin.cn/o/1431359.html

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

相关文章

AES加密原理

AES是一个迭代的、分组密码加密方式&#xff0c;可以使用128 、192和256位密钥。与 公共密钥密码使用密钥对不同&#xff0c;对称密钥密码使用相同的密钥加密和解密数据。 通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结 构&#xff0c;在该循环中重…

小程序中封装下拉选择框

小程序中没有现成的下拉选择组件&#xff0c;有个picker组件&#xff0c;但是是底部弹出的&#xff0c;不满足我的需求&#xff0c;所以重新封装了一个。 封装的下拉组件 html部分&#xff1a; <view class"select_all_view"><!-- 内容说明&#xff0c;可…

ref和reactive, toRefs的使用

看尤雨溪说&#xff1a;为什么Vue3 中应该使用 Ref 而不是 Reactive&#xff1f; toRefs import { ref, toRefs } from vue;// 定义一个响应式对象 const state ref({count: 0,name: Vue });// 使用toRefs转换为响应式引用对象 const reactiveState toRefs(state);// 现在你…

vue3 之 组合式API—reactive和ref函数

ref&#xff08;&#xff09; 作用&#xff1a;接收简单类型或者对象类型的数据传入并返回一个响应式的对象 核心步骤&#xff1a; 1️⃣ 从 vue 包中导入 ref 函数 2️⃣在 <script setup>// 导入import { ref } from vue// 执行函数 传入参数 变量接收const count …

2024亿级密码泄露事件:涉及7084万个邮箱账号

近日&#xff0c;热门漏洞通知服务HIBP所有者特洛伊・亨特&#xff08;Troy Hunt&#xff09;发布博文&#xff0c;表示在暗网上发现了超大规模的泄漏数据集&#xff0c;被称为Naz.API列表。该数据集包含7084万个电子邮件地址以及超过1亿个密码凭证&#xff0c;至少有超过40万 …

【AG32VF407】国产MCU+FPGA Verilog双边沿检测输出方波

视频讲解 [AG32VF407]国产MCUFPGA Verilog双边沿检测输出方波 实验过程 本次使用使用AG32VF407开发板中的FPGA&#xff0c;使用双clk的双边沿进行检测&#xff0c;同步输出方波 同时可以根据输出的方波检测clk的频率&#xff0c;以及双clk的相位关系&#xff0c;如下为verilog…

Google play全球桌面棋牌游戏下载量周排行榜(2024.01.22—01.28)

今天酷鸟远程整理了Google paly桌面棋牌类游戏在美国、香港、巴西地区下载量排行榜前20名情况。 作为谷歌开发者的你&#xff0c;快来看看有没有你关心的游戏应用吧。 如果还想看更多或其它国家和地区的应用&#xff0c;或其它类别应用的相关具体数据&#xff0c;例如&#x…

Patch2QL:开源供应链漏洞挖掘和检测的新方向

背景 开源生态的上下游中&#xff0c;漏洞可能存在多种成因有渊源的其它缺陷&#xff0c;统称为“同源漏洞”&#xff0c;典型如&#xff1a; 上游代码复用缺陷。开源贡献者在实现功能相似的模块时&#xff0c;常复用已有模块代码或逻辑&#xff1b;当其中某个模块发现漏洞后…

成都爱尔林江院长解读儿童青少年为什么一定要进行医学验光配镜

根据国家卫健委数据显示&#xff1a;我国青少年儿童总体近视率为52.7%、高度近视人口超3000万。近视学生中,有10%为高度近视,且占比随年级升高而增长。 近视孩子之多&#xff0c;孩子视力发展备受关注。戴镜进行近视防控十分必要&#xff0c;且眼镜不可随意验配&#xff01; 成…

2024年【安全员-B证】考试资料及安全员-B证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年安全员-B证考试资料为正在备考安全员-B证操作证的学员准备的理论考试专题&#xff0c;每个月更新的安全员-B证模拟考试题库祝您顺利通过安全员-B证考试。 1、【多选题】《中华人民共和国安全生产法》规定&#…

Linux下qemu的安装并搭建虚拟arm环境(带helloworld测试)【超详细】

qemu的安装并搭建虚拟arm环境 1、准备工作1.1 安装交叉汇编工具1.2 编译内核kernel1.3 u-boot编译1.4 制作根文件系统-busybox 2、启动qemu&#xff08;arm&#xff09;3、helloworld测试 1、准备工作 1.1 安装交叉汇编工具 交叉编译器的作用就不需要详细解释了&#xff0c;因…

C++ Primer 8.1 IO类 知识点

C Primer 8.1 IO类 io对象无拷贝赋值条件状态管理缓存练习题 io对象无拷贝赋值 ofstream out1,out2; //以下操作全为错误 out1out2; ofstream print(out2); out2print(out1)&#xff1b;条件状态 流对象的rdstate成员返回一个iostate值&#xff0c;表示其状态(P279) aotu ol…

springboot151基于web的人力资源管理系统的设计与实现

人力资源管理系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;员工信息因为其管理内容繁杂&#xff0c;管理数量繁…

六大免费的Redis内存分析工具

在我们需要分析Redis实例的内存使用情况时&#xff0c;市场上有着许多免费的开源工具&#xff0c;同时也有少量的付费产品。如果您想更深层次地分析内存相关问题的话&#xff0c;就可能需要用到一些更具针对性的“独门”工具了。 【51CTO.com快译】在我们需要分析Redis实例的内…

STM32--HAL库定时器学习记录(易懂)--持续学习

一、什么是定时器 定时器就是计数器&#xff0c;通过计数完成一系列功能。 二、定时器的分类 定时器分为基本定时器、通用定时器、高级定时器。级别不同&#xff0c;功能不同。级别越高&#xff0c;功能越强。 三、定时器&#xff08;计数器&#xff09;三个重要寄存器 预分…

机器学习_15_贝叶斯算法

文章目录 1 贝叶斯定理相关公式2 朴素贝叶斯算法2.1 朴素贝叶斯算法推导2.2 朴素贝叶斯算法流程 3 高斯朴素贝叶斯4 伯努利朴素贝叶斯5 多项式朴素贝叶斯6 贝叶斯网络6.1 最简单的一个贝叶斯网络6.2 全连接贝叶斯网络6.3 “正常”贝叶斯网络6.4 实际贝叶斯网络&#xff1a;判断…

中国城乡建设统计年鉴,pdf、xls格式,时间覆盖2002-2022年

基本信息&#xff1a; 数据名称: 中国城乡&#xff08;市&#xff09;建设统计年鉴 数据格式: pdf、xls不定 数据时间: 2002-2022年 数据几何类型: 文本 数据坐标系: —— 数据来源&#xff1a;住房和城乡建设部 2005年之后数据中有《中国城市建设统计年鉴》、《中…

基于JAVA的宠物管理系统

技术架构&#xff1a; Servlet JSP MySQL 有需要该项目的小伙伴可以私信我你的Q。 功能介绍&#xff1a; 系统主要分为前台和后台两大模块 前台主要由用户体验使用: 用户登录 注册 查找商品 商品类别等功能导航&#xff1b; 后台…

一些你可能用到的函数和头文件

不知道大家对于bool&#xff08;布尔&#xff09;函数记忆如何&#xff0c;今天我们就讲一下 bool 函数。 在一些要判断一个数是否具有某种性质的时候可以使用 bool 函数&#xff0c;在一些情况下可以结合使用if else 或 switch 以及 while 等函数来做到判断性质。 1. bool 函…

雨云免费SSL证书介绍

SSL证书是网站保护用户数据安全和保护网站自身免受黑客攻击的有效工具。雨云免费SSL证书是一种免费的SSL证书服务。 什么是SSL证书&#xff1f; SSL&#xff08;Secure Sockets Layer&#xff09;证书是一个数字证书&#xff0c;可以证明网站身份的真实性&#xff0c;并保护在…