linux文件基础-2_linux文件细节_lseek_文件指针

2023-11-02

一、linux管理文件

1、硬盘中的静态文件和inode(i节点)

1)静态文件:放在硬盘中,固定的形式。
2)硬盘的两大区域:
(1)硬盘内容管理表项储存内容区域
(2)操作系统先去访问硬盘内容管理表项->扇区级别的信息->得到储存内容区域

3)操作系统最初拿到的是文件名,最终拿到文件内容
(1)查询硬盘内容管理表(以文件为单位记录各个文件的信息)
(2)每个文件一个信息列表,即为inode
(3)这个结构体记录了{文件名、扇区号、块号…}
(4)u盘的格式化:快速格式化和普通格式化的区别:快速格式化只删除U盘的内容管理表(inode),而普通格式化则完全删除

2、内存中被打开文件和vnode(v节点)

1)每个进程都有一个数据结构来记录进程的所有信息(进程信息表
2)表中的指针指向文件管理表(记录进程打开的所有文件和相关信息)
3)文件管理表:索引打开文件的index就是文件描述符fd—>找到管理结构体vnode
4)vnode记录了被打开文件的各种信息,即fd->vnode

3、文件流

1)文件中N多的个字符被挨个一次读出/写入时,这些字符就构成了一个字符流
2)流这个概念是动态
3)编程中提到流这个概念,一般都是IO相关的,经常叫IO流文件操作时就构成了一个IO流

二、lseek

1、文件指针

1)打开的文件后读写的文件都是动态文件(内存),其形式是文件流形式。
2)GUI模式下光标来标识正在操作的位置。
3)文件指针是文件管理表的一个指针,即vnode中的一个元素,表示我们当前操作的文件流的位置。linux系统用lseek函数来访问这个文件指针
4)我们打开空文件,默认文件指针指向文件流的开始。(先write,文件指针已经在结尾、再read就是空的)

2、lseek

函数原型:

off_t lseek(int fd, off_t offset, int whence);

whence:

as follows description
SEEK_SET 偏移量设置为offset字节
SEEK_CUR 偏移量设置为当前位置加上offset字节
SEEK_END 偏移量设置为文件末尾加上偏移字节大小

返回值:
lseek()返回的结果是从文件开头的字节偏移位置。返回-1并设置errno以指示错误。

1)用lseek计算文件长度

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

int cal_len(const char * pathname)
{
	int fd = -1, ret = -1;
	
	fd = open(pathname, O_RDONLY);
	if (-1 == fd)
	{
		perror("文件打开错误")return -1;
	}
	
	// 使用文件指针移动到末尾,返回值为开头到结尾的偏移
	ret = lseek(fd, 0, SEEK_END);
	
	return ret;
}

int main(int argc, char *argv[])
{
	int fd = -1, ret = -1;
	
	if (argc != 2)
	{
		_exit(-1);
	}
	
	ret = cal_len(argv[1]);
	
	printf("长度:%d\n", ret);
	
}

2)构建空洞文件
(1)空洞文件是文件一段是空的。(打开文件用lseek跳过一段,再写就是空洞文件了)
(2)空洞文件方法对多线程共同操作文件是及其有用的,创建大文件,将文件分为多段,每个线程负责一段写入。


注:笔记整理,参考于朱有鹏老师的嵌入式核心课程


被抛弃的写随笔公众号改写技术文章了,感兴趣的可以关注公众号:王崇卫
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux文件基础-2_linux文件细节_lseek_文件指针 的相关文章

  • Discuz!应用中心安装插件显示数据下载错误(105/102)的解决方法

    Discuz 应用中心安装插件的时候最后提示数据下载错误 105 或数据下载错误 102 的问题 搜索了下看见很多站长反馈这个问题 出现类似的错误主要原因是服务器和应用中心连接出现问题 可以从以下3点去排查 1 云平台需要保证正常 所以先看
  • SAT (Separating Axis Theorem)

    Skip to content Home Download GitHub Maven Central About News Documentation Getting Started FAQ Samples Advanced Joints
  • jenkins中findbugs插件检测规则配置

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 近期项目中在jenkins自动构建基础上引入了findbugs进行代码检测 藉以发现项目中隐藏的一些问题 部署使用后发现一些bug是项目中不需要去修改的 众所周知在ecli
  • 注意力评分函数(掩蔽softmax操作,加性注意力,缩放点积注意力)

    将注意力汇聚的输出计算可以作为值的加权平均 选择不同的注意力评分函数会带来不同的注意力汇聚操作 当查询和键是不同长度的矢量时 可以使用可加性注意力评分函数 当它们的长度相同时 使用缩放的 点 积 注意力评分函数的计算效率更高 注意力汇聚 N
  • 蓝桥杯基础试题汇总

    目录 1 试题 基础练习 A B问题 2 数列问题 3 试题 基础练习 十六进制转八进制 4 试题 基础练习 十六进制转十进制 5 试题 基础练习 十进制转十六进制 6 试题 基础练习 序列求和 7 试题 基础练习 圆的面积 8 试题 基础
  • 北京工作单身,老家江西,90年水瓶男,无人驾驶公司从事研发工作

    对面走过来一个人 你撞上了那就是爱情 人生就是在走一条长长的路 我不知道它有没有终点 但我知道我会在路上遇到自己喜欢的人 我要在路上立个路牌啦 哦哦 开个玩笑 哈哈 博主 男生 水瓶座 90年 来自江西农村 本科学历 男 身高167cm 独
  • Ubuntu16.04配置Android开发环境

    1 下载安装jdk 用oracleJDK 据说openJDK很难用 下载地址 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html
  • [转]npm install 参数 的含义

    npm 5 0 0 之前 有 save 参数才会把模块写入到 packages json 现在已经是内置参数 不用额外写了 1 npm 常用的安装命令 npm i 就是npm install 简写 npm i xxx D 就是 npm i
  • 第十一章 关联容器(重点)

    11 关联容器 重点 关联容器中的元素是按关键字来保存和访问的 map 中的元素是一些关键字 值 key value 对 关键字起到索引的作用 值则表示与索引相关联的数据 set 中每个元素只包含一个关键字 set 支持高效的关键字查询操作
  • 运用威廉指标判断短线买卖点(图解)

    威廉指标 W R 又称为威廉超买超卖指数 它与随机摆动指标 KDJ 相似 也是一种分析市场短期内超买超卖情况的摆动类指标 威廉指标是一个波动性很强的短线指标 它可以帮助投资者在震荡行情中较为准确地进行高抛低吸操作 威廉指标的设计原理 威廉指
  • VS Code 配合 WSL 搭建 C/C++ 开发环境

    WSL 真香 最近在看 TCP IP网络编程 韩国人写的 讲解了 Windows 和 Linux 平台下的网络编程 才看了四章 感觉通俗易懂 值得一读 出版社网站上提供了源码 平时主要使用 Windows 为了看本书切换到 Linux 感觉
  • 盘点JAVA中比较常见的数据类型的 取值空间大小(让我们来干了这杯爪洼岛咖啡)

    JAVA作为一门面向对象的编程语言 吸收了C 等编程语言的优 点的同时 也展现了它独有的强大一面 列如可移植性可跨平台 性与及兼容性等特征 吸引了无数程序猿为其着迷 话不多说接下来今天我来带大家了解JAVA这门编程语言 中常用的数据类型的相
  • 深度学习------pytorch,CNN:实现mnist,cifar10数据集

    1 torch实现mnist数据集 1 1 cnn卷积 用全连接层写 实现mnist数据集分类 import torch from torch autograd import Variable import numpy as np from
  • How do Functional, Structural, and Behavioral Models Work Together to Describe a Whole System?

    原文链接 https brogramo com how do functional structural and behavioral models work together to describe a whole system As a

随机推荐

  • 机器学习、数据挖掘和统计模式识别学习(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 机器学习是让计算机在没有明确编程的情况下采取行动的科学 在过去的十年中 机器学习为我们提供了自动驾驶汽车 实用的语音识别 有效的网络搜索以及对人类基因组的理解大大提
  • postgresql-使用pg_dump导出表、pg_store导入表

    pg dump 是一个用于备份PostgreSQL数据库的实用工具 即使当前数据库正在使用 也能够生成一致性的备份 且不会阻塞其他用户访问数据库 包括读 写 pg restore 从一个归档中恢复一个由 pg dump 创建的 Postgr
  • 航空航天专业词汇(待补全)

    航空航天专业词汇 英文 中文 aborted rejected abandoned take off 中断起飞 above cloud 在云上 access flap 接口盖 acceleration 加速促进 actuating jack
  • html type=hidden 属性,input 属性及类型有哪些(type=text/button/hidden)

    input 从字面意就可以看出专门用来给用户输入文字的 当然也包括选择文件 它不具体表示某一类元素 如文本框 text 要使它具体表示一类元素必须加类型指明 如表示文本框加 type text type 也是 input 众多属性中最重要的
  • spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集

    前言 本章是spring基于XML 配置bean系类中第7篇讲解spring通过文件属性注入bean和基于xml的bean的自动装配以及spring eel表达式的使用加代码合集 个人主页 尘觉主页 个人简介 大家好 我是尘觉 希望我的文章
  • c语言 打空心菱形

    没错 如图所示 我们要整一个这样的菱形 写的挺麻烦的 代码如下 我是一半一半写的 要n 5 先写上半部分的代码 那么它是咋写出来的呢 本题可以完全用for语句写 但我选择了用for和if语句相结合的方式 i是代表的横 j代表的是列 所以它最
  • nginx相关漏洞处理:CVE-2016-2183、CVE-2022-41741、CVE-2022-41742

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 漏洞内容 二 现状 三 centos7安装openssl11 四 升级nginx到1 24 0 1 下载nginx 2 编译安装nginx 3 配置ngi
  • 2022数学建模美赛E题详细思路获取

    已更新 公众号 千千小屋grow 数据在文后链接 背景 正如我们所知 气候变化对生命构成了巨大的威胁 为了减轻气候变化的影响 我们需要采取严厉的行动 以减少大气中的温室气体的数量 仅仅是减少温室气体的排放是不够的 我们需要努力增加通过生物圈
  • log4j日志在java控制台输出,简单实用

    log4j日志在java控制台输出 简单实用 1 log4j输出有2中方式 第一种是将日志信息保存在一个文本当中 第二种是输出到控制台中 下面介绍第二种方式 2 在控制台输出log4j日志信息 是开发项目中常用的也是比不可少的也是必须会的一
  • 微信小程序中slider实现拾色器功能

    微信小程序中slider实现拾色器功能 思路 效果图 体验 代码 效果体验 思路 画板中要实现颜色选择功能 几经周折 效果还可以 整个思路就是 1 利用线性过渡实现slider背景渲染 2 获取slider滑块value值 3 计算该val
  • Markdown公式编辑学习笔记

    一 公式使用参考 1 如何插入公式 行中公式 放在文中与其它文字混编 可以用如下方法表示 数学公式 独立公式可以用如下方法表示 数学公式 自动编号的公式可以用如下方法表示 若需要手动编号 参见大括号和行标的使用 begin equation
  • 再看中国互联网web2.0百强名单

    无意中翻看到一篇我在三年多前写的文章 我看中国互联网web2 0百强名单 读来颇有感概 2005 2006那两年 正是WEB2 0概念轰轰烈烈的时候 大大小小的新网站层出不穷 博客 视频 交友 评点 社区 聚合 不管自己的网站的UGC比例多
  • bootstrap table 表格支持shirt 多选_bootstrap-table 表格行内编辑实现

    这篇文章向大家介绍一下如何使用bootstrap table插件实现表格的行内编辑功能 我的web前端学习交流群点击进入1045267283 欢迎加入 先放一张效果图 应用场景 之前的项目也是采用bootstrap table 添加和修改数
  • 牛客——子序列(组合数学)

    子序列 题目描述 给定一个小写字母字符串 T T T 求有多少长度为 m m m的小写字母字符串 S
  • 端口相关知识总结

    端口相关知识总结 80是服务器上的一个软件 服务器软件 端口是软件的代号 3306是MySQL的端口 1521是Oracle的端口 80是外部服务器的通用端口 京东也是 不写也可以访问 80端口可以省略 文件下载端口 FTP 都是21 FT
  • Android 13 - Media框架(2)- Demo App与MediaPlayer Api了解

    尝试用MediaPlayer写了一个播放demo 实现了网络流和本地流的播放 由于本人对app开发一窍不通 所以demo中很多内容是边查资料边写的 写的也比较杂乱 能够帮助理解api就行 这一节主要会记录demo开发中学到的内容 以及了解M
  • LeetCode 312. Burst Balloons(戳气球)

    原题网址 https leetcode com problems burst balloons Given n balloons indexed from 0 to n 1 Each balloon is painted with a nu
  • 微信小程序云开发实现微信小程序订阅消息服务通知教程

    微信小程序云开发实现微信小程序订阅消息服务通知教程 申请模板 云函数 小程序页面 调试 我这里就直接真机测试了 申请模板 1 在这边菜单栏 找到 功能 里的 订阅消息 2 在 公共模板库 里面选取自己想要的模板 选取自己想要的消息即可 云函
  • 『学Vue2+Vue3』指令补充、computed计算属性、watch侦听器

    day02 一 今日学习目标 1 指令补充 指令修饰符 v bind对样式增强的操作 v model应用于其他表单元素 2 computed计算属性 基础语法 计算属性vs方法 计算属性的完整写法 成绩案例 3 watch侦听器 基础写法
  • linux文件基础-2_linux文件细节_lseek_文件指针

    一 linux管理文件 1 硬盘中的静态文件和inode i节点 1 静态文件 放在硬盘中 固定的形式 2 硬盘的两大区域 1 硬盘内容管理表项和储存内容区域 2 操作系统先去访问硬盘内容管理表项 gt 扇区级别的信息 gt 得到储存内容区