鄙人学习笔记


文章目录

  • 文件读写偏移量(文件指针)
    • 定义
      • 举个例子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)--文件读写偏移量及文件描述符相关推荐

  1. 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 ...

  2. Linux网络编程--sendfile零拷贝高效率发送文件

    本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证. 那么什么是sendfile呢? linux系统使用man sendfile,查看sendfile原型如下: # ...

  3. 使用FileSystem类进行文件读写及查看文件信息

    使用FileSystem类进行文件读写及查看文件信息 在这一节我们要深入了解Hadoop的FileSystem类--这是与与hadoop的文件系统交互的重要接口.虽然我们只是着重于HDFS的实现,但我 ...

  4. php利用文件做数据储存,PHP_PHP文件读写操作之文件写入代码,在PHP网站开发中,存储数据通 - phpStudy...

    PHP文件读写操作之文件写入代码 在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势, ...

  5. Unix——《Unix网络编程》配置unp.h头文件

    <Unix网络编程 卷1>unp.h 头文件及其编译问题 本书源码下载地址 http://www.unpbook.com 解压tar -zxvf unpv13e.tar.gz 其实各个编译 ...

  6. 网络编程(Tcp/Udp实现聊天、文件上传)

    网络编程 1.1 概述 计算机网络是指将位置不同的多台[计算机 通过通信线路连接起来,实现资源共享和信息传递的计算机系统 1.2 网络通信的要素 ip和端口 网络通信协议(tcp/udp) 1.3 I ...

  7. java网络编程 UDP通信协议实现局域网内文件的发送和接收

    要实现两台内网下的机子进行通信,首先得知道接收方的内网IP,获取IP的方式:可以打开任务管理器的以太网进行查看: 如下 也可以通过 win+r 输入cmd ,然后输入 ipconfig  回车  进行 ...

  8. Linux应用编程和网络编程(3)------- Linux中文件的属性

    目录 一,linux中各种文件类型 二,常用文件属性获取 三,文件权限管理 四,读取目录文件 一,linux中各种文件类型 1.普通文件(- regular file) (1)文本文件.文件中的内容是 ...

  9. Python文件读写缓冲区和文件读写操作实例

    1.python文件缓冲区 f = open('test', 'w', 1) # 第三个参数为1表示行缓冲,默认值为-1 while True:data = input('>>>') ...

最新文章

  1. FCKeditor.Net 2.6.3 配置说明与文件精简
  2. 国内 Java 开发者必备的两个装备,你配置上了么?
  3. ZZ: How to remove 'Open in Windows Explorer' from the 'Actions Menu'
  4. java轴_JAVA2D:翻译轴
  5. 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains解决
  6. python 持续集成部署_Jenkins部署git+python项目实现持续集成
  7. FFmpeg AVFMT_NOFILE宏定义剖析
  8. 如何下载贵州省卫星地图高清版大图
  9. 数组排序 - 长辈的年纪
  10. 直播预告 | 哈工大HIT-SCIR实验室专场二
  11. 移动APP测试用例设计实践经验
  12. 如何使用pyinstaller将Python的代码打包
  13. HTML5 AJAX跨域请求
  14. 获取具体日期N个月前(后)的自然月时间戳
  15. 超详细案例讲解如何寻求产品的市场增长点?【线性回归数据可视化】
  16. 最小系统板 STM32入门,点亮 LED 灯(STM32F103C6T6)
  17. Windows的NSIS ERROR
  18. 微心情:蝴蝶为花碎,花却随风飞
  19. 抖音视频二创闷声发财
  20. 抗疫情资源:法国最大的160家医用物资供应商名录

热门文章

  1. html元素嵌套与并列,HTML的元素嵌套规则
  2. 自定义队列(优化了数组固定长度的弊端)以及集合中的一些重点内容
  3. ES6-note-Set和Map(草稿)
  4. 聚焦一切关联需求-企业数字化转型:外部驱动力之客户篇
  5. Struts2 学习系列 (2) 访问web资源
  6. C++Singleton的DCLP(双重锁)实现以及性能测评
  7. 【Task5(2天)】模型调参
  8. 洛谷P4742(tarjan缩点+拓扑DP)
  9. CS229 6.5 Neurons Networks Implements of Sparse Autoencoder
  10. JAVA设计模式总结之23种设计模式