网络编程(part5)--文件读写偏移量及文件描述符
鄙人学习笔记
文章目录
- 文件读写偏移量(文件指针)
- 定义
- 举个例子1(读写操作的文件偏移量)
- 举个例子2(文件偏移量的初始位置验证)
- 基本操作
- 举个例子1(tell()函数)
- 举个例子2(tell()函数)
- 举个例子3(seek()函数)
- 文件描述符
- 定义
- 获取文件描述符
- 举个例子
文件读写偏移量(文件指针)
定义
打开一个文件进行操作时,系统会自动生成一个记录,记录中描述了我们对文件的一系列操作。其中包括每次操作到的文件位置。文件的读写操作都是从这个位置开始进行的。
备注:在我们open一个文件时,就有了这个文件偏移量,但是当我们重新open的话,这个文件偏移量会被刷新。要注意的是,我们的读写操作用的是同一个文件偏移量。
举个例子1(读写操作的文件偏移量)
康一康下面这段代码:
结果:
我们发现,我们明明写入数据了鸭~为啥,啥都没打印出来?这是为啥呢?
这一切都使偏移量的错,都是你!
因为我们一个文件对象,只拥有一个文件偏移量,无论是读取还是写入,用的都是同一个偏移量。当我们写完”hello world”这个字符串时,文件偏移量就到末尾了。这时,我们再想进行读取,就是从偏移量的位置(末尾)向后读取,所以我们啥也读不到。
举个例子2(文件偏移量的初始位置验证)
看以下一段代码:
结果:
我们发现,没有任何东西被打印出来,这是咋回事呢?这说明,当我们用追加操作a的方式打开文件时,文件偏移量在最末尾,所以我们读不到任何东西。
备注:读取r和写入w的打开方式,文件偏移量在最开头。
基本操作
①tell
tell()
功能:获取当前的文件偏移量,表示从开头位置,向后偏移了多少。
②seek
seek(offset[,whence])
功能:移动文件偏移量位置
参数:
offset代表相对于某个位置偏移量。可以是负数表示向前移动。
whence代表基准位置。默认值为 0,代表从文件开头算起;1代表从当前位置算起,2 代表从文件末尾算起。
举个例子1(tell()函数)
首先我们先看一下test文件中的数据:
看以下一段代码:
输出结果:
我们可以看到,test文件内有11个字节,我们的当前的文件偏移量为11,正好验证了我们之前说的【追加操作a的方式打开文件时,文件偏移量在最末尾】
举个例子2(tell()函数)
输出结果:
由结果可知,我们读俩字符,指针就向后走两位。
举个例子3(seek()函数)
我们先康一康下面这一段代码:
结果:
如果我想在第二次读取文件时,让它从头读取呢?
这时,我们可以通过人为调整偏移量,来实现:
结果:
完整代码:
fd = open('test','r+')#相对开头位置向后偏移了多少
print("当前文件偏移量位置:",fd.tell()) #0
print(fd.read(2))
print("当前文件偏移量位置:",fd.tell()) #2#人为调整文件偏移
fd.seek(0,0) #相对开头位置向后偏移0个字节
print(fd.read(2))fd.close()
文件描述符
定义
系统中,每一个IO操作都会被分配一个整数作为编号,该整数即这个IO操作的文件描述符。文件描述符是不会重复的。
获取文件描述符
- 获取文件描述符函数
fileno()
通过IO对象获取对应的文件描述符。
举个例子
代码和结果放一起:
网络编程(part5)--文件读写偏移量及文件描述符相关推荐
- linux应用编程和网络编程-3.1.linux中的文件IO(read write open lseek)系统文件管理 inode 3种退出 fd 文件共享
基本文件API读写 文件IO的标准IO比较 文件IO read和write open及flag lseek 3种exit.error.perror linux系统文件管理 文件描述符filedescr ...
- Linux网络编程--sendfile零拷贝高效率发送文件
本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证. 那么什么是sendfile呢? linux系统使用man sendfile,查看sendfile原型如下: # ...
- 使用FileSystem类进行文件读写及查看文件信息
使用FileSystem类进行文件读写及查看文件信息 在这一节我们要深入了解Hadoop的FileSystem类--这是与与hadoop的文件系统交互的重要接口.虽然我们只是着重于HDFS的实现,但我 ...
- php利用文件做数据储存,PHP_PHP文件读写操作之文件写入代码,在PHP网站开发中,存储数据通 - phpStudy...
PHP文件读写操作之文件写入代码 在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势, ...
- Unix——《Unix网络编程》配置unp.h头文件
<Unix网络编程 卷1>unp.h 头文件及其编译问题 本书源码下载地址 http://www.unpbook.com 解压tar -zxvf unpv13e.tar.gz 其实各个编译 ...
- 网络编程(Tcp/Udp实现聊天、文件上传)
网络编程 1.1 概述 计算机网络是指将位置不同的多台[计算机 通过通信线路连接起来,实现资源共享和信息传递的计算机系统 1.2 网络通信的要素 ip和端口 网络通信协议(tcp/udp) 1.3 I ...
- java网络编程 UDP通信协议实现局域网内文件的发送和接收
要实现两台内网下的机子进行通信,首先得知道接收方的内网IP,获取IP的方式:可以打开任务管理器的以太网进行查看: 如下 也可以通过 win+r 输入cmd ,然后输入 ipconfig 回车 进行 ...
- Linux应用编程和网络编程(3)------- Linux中文件的属性
目录 一,linux中各种文件类型 二,常用文件属性获取 三,文件权限管理 四,读取目录文件 一,linux中各种文件类型 1.普通文件(- regular file) (1)文本文件.文件中的内容是 ...
- Python文件读写缓冲区和文件读写操作实例
1.python文件缓冲区 f = open('test', 'w', 1) # 第三个参数为1表示行缓冲,默认值为-1 while True:data = input('>>>') ...
最新文章
- FCKeditor.Net 2.6.3 配置说明与文件精简
- 国内 Java 开发者必备的两个装备,你配置上了么?
- ZZ: How to remove 'Open in Windows Explorer' from the 'Actions Menu'
- java轴_JAVA2D:翻译轴
- 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains解决
- python 持续集成部署_Jenkins部署git+python项目实现持续集成
- FFmpeg AVFMT_NOFILE宏定义剖析
- 如何下载贵州省卫星地图高清版大图
- 数组排序 - 长辈的年纪
- 直播预告 | 哈工大HIT-SCIR实验室专场二
- 移动APP测试用例设计实践经验
- 如何使用pyinstaller将Python的代码打包
- HTML5 AJAX跨域请求
- 获取具体日期N个月前(后)的自然月时间戳
- 超详细案例讲解如何寻求产品的市场增长点?【线性回归数据可视化】
- 最小系统板 STM32入门,点亮 LED 灯(STM32F103C6T6)
- Windows的NSIS ERROR
- 微心情:蝴蝶为花碎,花却随风飞
- 抖音视频二创闷声发财
- 抗疫情资源:法国最大的160家医用物资供应商名录
热门文章
- html元素嵌套与并列,HTML的元素嵌套规则
- 自定义队列(优化了数组固定长度的弊端)以及集合中的一些重点内容
- ES6-note-Set和Map(草稿)
- 聚焦一切关联需求-企业数字化转型:外部驱动力之客户篇
- Struts2 学习系列 (2) 访问web资源
- C++Singleton的DCLP(双重锁)实现以及性能测评
- 【Task5(2天)】模型调参
- 洛谷P4742(tarjan缩点+拓扑DP)
- CS229 6.5 Neurons Networks Implements of Sparse Autoencoder
- JAVA设计模式总结之23种设计模式