标准IO的定位位置

一、fseek()

调整position 的位置,来进行读写。

  • offset 偏移量,可正可负,whence 是指参考点,是相对于谁。
  • 如果是开头,数字大于等于0

位置

  • SEEK_SET  初始位置
  • SEEK_CUR  R以当前postion 为参考点
  • SEEK_END  是最后一个的下一个,注意可以为大于0,只有写了,文件的大小会改变,在后面加上数字,其他偏移的数字没有写为0。

总结

  • 一般情况函数返回0 成功,返回-1 失败
二、ftell()

功能

可以通过fseek 偏移到最后,调用ftell ,返回一个从开始到当前位置的大小。(把文件的大小)也就是可以返回从开头到postition的位置文件的大小。

注意

获得文件大小之后,对文件后续还有其他操作,必须对pos 进行复位。

三、rewind() 复位

功能

一调他,函数的指针都会复位到开头。没有返回值。

四、总结三个函数的标准格式如下

五、缓冲区

缓冲区在内核里面,没有在a.out里面 ;缓冲区的原因,是高速设备速度不匹配 

5.1 行缓冲 
  1. 满足任意一个条件即可,都可以进行刷新。
  2. 装满之后,要再加一个,相当于要把其挤出来,这样才会到屏幕输出
  3. 条件是正常结束,如果前面出错了,程序结束还是看不到缓冲区的东西。
5.2 全缓冲

  1.  这个不认\n,将数据写到文件中,。
  2. 只有这三个条件都不满足,那么数据都在缓冲区里面,不往文件写
  3. fflush 在刷新的时候一般写的都是stdout,stdin 调用没有啥影响。
 5.3 无缓冲

 没有调错机制,那么缓冲的错误信息可能已经在时间上有偏差,所以系统设置了stderr,只要有报错,直接到屏幕,不需要刷新。

六、文件IO
6.1 文件IO基本知识

操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称之为 系统调用  其中有个  文件IO
一般都是对设备文件操作,当然也可以对普通文件进行操作。
注意

本质就是一个数字,他不单单是一个数字,代表的是即将被处理的文件


一个基于Linux内核的没有缓存的IO机制
特性:

  1. 没有缓存区
  2.  操作对象不在是流,而是文件描述符
  3. 文件描述符
  4. 很小的非负的整数 int   0-1023
  5. 内核每打开一个文件就会获得一个文件 描述符
 6.2 open()

open(实际是以前几个的封装)  打开或者创建文件

int open(const char *pathname,int flags,mode_t mode) 666/777 文件执行的权限

第一个是文件名,第二个是标志位(标志位要求如下,必须选择一个,读、写、读写)

除了设置位之后,还要写其他标志位

fopen open 权限设置对应标志

  • w   O_WRONLY|O_CREAT|O_TRUNC
  • w+  O_RDWR|O_CREAT|O_TRUNC
  • r  O_RDONLY r+ O_RDWR
  • a  O_WRONLY|O_CREAT|O_APPEND
  • a+   O_RDWR|O_CREAT|O_APPEND 
  •  O_CREAT, 创建文件 
  • O_EXCL,需要和O_CREAT同时使用,表示新建的文件不能存在,成功,否则open就会失败
  • O_NOCTTY,不是终端设备
  • O_TRUNC文件内容清空
  • O_APPEND追加
  • O_ASYNC异步io,什么时候io不确定,
  • O_NONBLOCK非阻塞 

 注意

若有create ,必须加权限,一般写0666,前面加0,因为是八进制,若没有则最后一个参数可以忽略不写。

6.3 write()

参数解释 

1、写那个文件

2、写入的内容 (既可以写文本,也可以写二进制)

3、写多长度

注意 长度

  1. strlen(buf)
  2. sizeof(buf) 这的的大小都是实际大小写入
  3. count 最好写有效字符长度,否则实际很多都是\0 浪费了。

返回值

成功返回实际写入的字符数,注意0不代表错误。对于某些特殊设备文件。错误返回-1

6.4 close() 

关闭文件描述符

6.5 read()

读文件

  • 因为要把文件读出来,所以在内存里面开个buf;count 为本次的内容的长度,可以比实际略大
  • 返回值是实际的大小,(实际放入的大小)。
  • 返回值是0,代表文件到达结尾。
  • 小于0没有读到
  • read 二进制,文本都可以调用。
 6.6 lseek()

4、lseek 对其他三个的封装,实现其他三个的功能;调整文件读写位置

lseek fseek, rewind ftell off_t lseek(int fd, off_t offset, int whence);

功能: 定位光标的位置

参数: fd:文件描述符 对谁

offset:偏移量

  • 正:向后偏移
  • 负:向前偏移
  • 零:不偏移

whence:

  • SEEK_SET 文件的最开始
  • SEEK_CUR 文件当前的位置
  • SEEK_END 文件的最后算 off_t返回值:
  • 返回的是从最开始到现在位置的字节数。 成功返回偏移量 失败返回-1
  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值