嵌入式学习第十六天!(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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu Linux 下安装和卸载cmake 3.28.2版本

一、安装cmake 1.首先&#xff0c;先从cmake官网下载cmake-3.28.2-linux-x86_64.tar.gz 2.用FinalShell 等文件上传工具&#xff0c;将这个压缩包上传到 虚拟机的某个路径去&#xff08;自选&#xff09; 3. cd /usr/local/bin/&#xff0c;然后创建cmake文件夹&#xff0c;…

重温《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》 –– 学习笔记(二)

第二部分&#xff1a;自动内存管理机制 第2章&#xff1a;Java内存区域与内存溢出异常 2.1 概述 Java 与 C 之间有一堵由内存动态分配和垃圾收集技术围成的高墙。 Java 程序员在 虚拟机自动内存管理机制 的帮助下&#xff0c;无需为每一个 new 操作去写配对的 delete/free …

Cox等级资料是个坑

R语言做&#xff01;初学者先进来看看&#xff01;&#xff01;&#xff01; SCI冲 COX多因素模型需要满足的条件&#xff1a; 1.各观测值间相互独立&#xff0c;即残差之间不存在自相关&#xff1b; 2.因变量和自变量之间存在线性关系&#xff1b; 3.残差的方差齐&#xf…

鸿蒙ArkUI实现开关switch组件

鸿蒙ArkUI官方提供的toggle组件实现了开关的样式&#xff0c;但在使用过程中还是非常的不方便。 DIY可视化对鸿蒙ArkUI实现开关switch组件扩展后满足基本的switch需求&#xff0c;支持绑定值、设置标题文本、整个背景样式等。 /*** 开关*/ Component export default struct Di…

Angular BaseView抽离页面公用属性

前言 如果有一系列的页面布局很类似&#xff0c;为了节省时间&#xff0c;我们可以把这些类似的页面所通用的属性和方法抽离成一个BaseView&#xff0c;让其它页面继承该基础页面&#xff0c;同时将一些经常改变的属性和差异的属性写到配置文件里。例如树容器初始时是否展开、…

npm ERR! code CERT_HAS_EXPIRED

执行npm i报错&#xff1a; npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/react-redux failed, reason: connect ETIMEDOUT 104.16.2.35:443 npm ERR! network This is a problem rel…

[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

python_蓝桥杯刷题记录_笔记_全AC代码_入门3

前言 记录我的解法以及笔记思路&#xff0c;谢谢观看。 题单目录 1.P2141 [NOIP2014 普及组] 珠心算测验 2.P1567 统计天数 3.P1055 [NOIP2008 普及组] ISBN 号码 4.P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here 5.P1308 [NOIP2011 普及组] 统计单词数 6.P1047 […

[职场] CAD设计师简历模板 #微信#知识分享#学习方法

CAD设计师简历模板 一份优秀的简历能帮助你更好地让你所应聘的公司了解你&#xff0c;并能更好地找到你想要的工作。因此&#xff0c;如何撰写一份优异的简历显得尤为重要。以下是申请“CAD设计师”职位时的一份简历模板&#xff0c;供大家参考阅读。 蓝山简历 求职意向&#…

CSDN文章导出工具

源码地址&#xff1a; github:https://github.com/lishuangquan1987/CSDNExportergitee:https://gitee.com/lishuangquan1987/csdnexporter 介绍 最近有CSDN博客导出来的需求&#xff0c;翻看了很多开源工具&#xff0c;都不能用或者不好用&#xff0c;于是决定自己做一个。…

vulhub中Adminer远程文件读取漏洞复现(CVE-2021-43008)

Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL、Oracle、Elasticsearch、MongoDB等数据库。 在其版本1.12.0到4.6.2之间存在一处因为MySQL LOAD DATA LOCAL导致的文件读取漏洞。 参考链接&#xff1a; https://gith…

外包干了10个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【JavaEE进阶】 图书管理系统开发日记——肆

文章目录 &#x1f343;前言&#x1f38d;约定前后端交互接⼝&#x1f340;服务器代码实现&#x1f6a9;控制层&#x1f6a9;业务层&#x1f6a9;数据层 &#x1f334;前端代码的修改⭕总结 &#x1f343;前言 今天我们来实现修改图书模块 首先我们先来看一下&#xff0c;需要…

深度学习在智能交互中的应用:人与机器的和谐共生

深度学习与人类的智能交互是当前人工智能领域研究的热点之一。深度学习作为机器学习的一个重要分支&#xff0c;具有强大的特征学习和模式识别能力&#xff0c;可以模拟人脑的神经网络进行数据分析和预测。而人类的智能交互则是指人类与机器之间的信息交流和操作互动&#xff0…

运维自动化bingo前端

项目目录结构介绍 项目创建完成之后&#xff0c;我们会看到bingo_web项目其实是一个文件夹&#xff0c;我们进入到文件夹内部就会发现一些目录和文件&#xff0c;我们简单回顾一下里面的部分核心目录与文件。 ├─node_modules/ # node的包目录&#xff0c;项目运行的依赖包…

逆向基础-破解密码

1.通过study PE查看.exe程序的位数 打开 x32dbg 从暂停到运行程序 原理&#xff1a;软件算出的密码与用户输入的密码作比较 破解流程&#xff1a;查信息 --> 找内存关键数据 --> 测试

Optimizer:基于.Net开发的、提升Windows系统性能的终极开源工具

我们电脑使用久了后&#xff0c;就会产生大量的垃圾文件、无用的配置等&#xff0c;手动删除非常麻烦&#xff0c;今天推荐一个开源工具&#xff0c;可以快速帮助我们更好的优化Windos电脑。 01 项目简介 Optimizer是一个面向Windows系统的优化工具&#xff0c;旨在提升计算机…

[GN] 23种设计模式 —— 常见设计模式学习总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言创建型模式 —— 创建的艺术结构型模式 —— 组合的艺术适配器模式 -- 不兼容结构的协调对象适配器类适配器模式优缺点适用场景 组合模式 -- 树形结构的处理例子…

微信小程序课设(基于云开发)

微信小程序通过Laf云平台接入ChatGPT实现聊天&#xff0c;回答方式采用流式回答。 以下是图片展示其页面 回答次数通过卡密兑换 以下是对话页面的代码 <!--pages/content/content.wxml--><view class"container"><view class"div" hidde…

前端工程化基础(二):前端包管理工具npm/yarn/cnpm/npx/pnpm

前端包管理工具 代码共享方案 创建自己的官网&#xff0c; 将代码放到官网上面将代码提交到GitHub上面&#xff0c;负责让使用者下载将代码提交到npm registry上面 下载比较方便&#xff0c;使用npm install xxx即可下载相应的代码npm管理的包 npm配置文件 主要用于存储项目…