标准IO——文件定位、文件IO

续:feof、ferror(检测一个流是否出错)、clearerr(清除一个流出错的标记)。

一、标准IO文件定位

1、fseek(定位)

        int fseek(FILE *stream , long offset(偏移长度) , int whence(偏移起始位置))

其中whence:三种宏——>SEEK_SET(开头) 、SEEKZ-CUR(当前) 、SEEK_END(末尾)

2、ftell

        long ftell(FILE *stream)

3、rewind

        void rewind(FILE *stream)           复位到开头

二、缓冲区

1、缓冲区在内核中,为了使高速设备(内存) 与 低速设备(硬盘)速度匹配。

2、分类:

(1)行缓冲

有1024字节(1k)空间,适用对象:在写终端(屏幕)terminal时。

刷新条件:①遇到 \n 刷新    ②缓存区满刷新     ③程序正常结束刷新     ④fflush刷新  fflush(stdout)

(2)全缓冲

有4096字节(4k)空间,适用对象:用于文件的读写。

刷新条件:①缓存区满刷新     ②程序正常结束刷新     ③fflush刷新  fflush(fp)

(3)无缓冲

0k空间,适用对象:用于出错处理信息的输出。stderr

三、文件IO

标准IO(C库中) ==封装了==> 系统调用(syscall)==都发送给==> linux内核。

<unistd.h>(系统调用中) <===>  <stdio.h>(C库中)。

1、在系统调用中,操作系统为了方便用户使用系统功能而对外提供的一组系统函数。称为文件IO。        适合:设备类文件。

2、特征

(1)无缓冲区;(2)操作对象不是流,是文件描述符

文件描述符——>本质:很小的非负整数。(代表即将被操作的资源)  0-1023

                与流对象匹配:0<——>stdin;1<——>stdout;2<——>stderr。因此文件一般从3开始。

3、步骤

(1)打开(open)   (2)读写(read/write)   (3)关闭(close)

1)open

        int open(const char *pathname , int flags(标志位) , mode_t mode(执行权限))

flags:O_RDONLY、O_WRONLY、O_RDWR、O_CREAT(创建)、O_TRUNC(清空)、O_APPEND(追加)

执行权限:一般文件都为 0666;有O_CREAT时必须写权限。

2)write

        ssize_t write(int fd,const void *buf,size_t count(有效长度(实际大小strlen)))

read

          ssize_t read(int fd,void *buf,size_t count(最大读取长度(sizeof)))

其返回值为实际读到的大小。

3)close

        int close(int fd)

4)lseek

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

定位到光标的位置<——>一个函数实现fseek、rewind、ftell所有的功能。

返回值为从文件开头到当前pos位置的字节数。

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值