Linux编程---文件IO

feof:判断流指针是否已到文件结尾

int feof(FILE *stream);

①功能:判断当前参数stream的文件流指针是否到达文件结尾。如果到达文件结尾则返回真,否则返回假。

注意:该操作一定要在一次IO操作之后判断。

②参数:stream ---- 要判断结尾的文件流对象

③返回值:成功到达结尾 --- 真;否则 --- 假。

feeror

int ferror(FILE *stream);

①功能:监测一个流是否出错,并清除错误标志位

②参数:stream ---要检查其错误状态的流

③返回值:流处于错误状态,返回 1;如果流没有错误,返回 0

fseek()

int fseek(FILE *stream, long offset, int whence);

调整读写指针的位置

①功能:将stream流文件中的文件指针从whence位置开始,偏移offset字节的长度。

②参数:stream :要移动文件指针的目标文件流对象。

 offset:要在文件内偏移的距离,单位字节:如果值为整数,则向文件末尾偏移;如果值为负数,则向文件开头偏移。

  whence :偏移的起始位置,由系统定义的三个宏开始:SEEK_SET --- 文件的开头位置;SEEK_CUR --- 文件的当前位置;SEEK_END --- 文件的末尾位置

③返回值:成功---返回 0;失败---  -1

注意:不支持设备文件,一般用于普通文件。

ftell()

long ftell(FILE *stream);  rewind(fp);

①功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。

②参数:stream 要返回指针距离的文件流对象;

        rewind:文件流指针的复位,等效于:fseek(stream, 0L, SEEK_END);

③返回值:成功---返回获取到的距离长度,单位是字节;失败 ---返回-1。

stdin:标准输入

stdout:标准输出

stderr:标准错误输出。程序中出现错误,不对数据缓存,直接刷新

缓冲区

行缓冲

大小1k,主要用于人机交互,行缓存多是关于终端的一些操作。

刷新条件:①遇到 '\n' ;②缓冲区满;③程序正常结束;④上面的条件都不满足,但想要显示数据,就调用fflush()函数。 ----fflush(stdout);

全缓冲

主要针对文件的操作,大小为4k(4096)

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

无缓冲

大小为0k,主要用于出错处理信息的输出,不对数据缓存直接刷新

文件IO

    操作系统为了方便用户使用系统功能而对外提供的一组系统函数,称之为 系统调用,其中文件IO属于系统调用,只能在Linux上使用。一般都是对设备文件操作,也可以对普通文件进行操作。

特性:

(1)没有缓存区 ---- 一个基于Linux内核的没有缓存的IO机制
(2)操作对象不在是流,而是文件描述符  FILE*    int 0-1023
(3)文件描述符:内核每打开一个文件就会获得一个文件 描述符,每个程序在启动的时候操作系统默认为其打开。

三个描述符与流对象匹配:
  0 ==>STDIN_FILENO === stdin
  1 ==>STDOUT_FILENO == stdout
  2 ==>STDERR_FILENO == stderr
  stdin,stdout,stderr,===>FILE*

步骤:

打开;读写;关闭 ------  open;read/write;close

open

int open(const char *pathname, int flags,int mode);

可以操作任意位置的文件,但是要写对文件路径

①功能:获得一个文件描述符

②参数:pathname:文件名;

flag:

O_APPEND:追加,跳转到文件指针的最后

O_CREAT:有新建文件的意思

O_TRUNC:清空文件

O_RDONLY :只读
O_WRONLY:只写
O_RDWR:读写

O_EXCL:需要和O_CREAT同时使用

O_NOCTTY:不是终端设备

③返回值:成功返回文件描述符;失败返回-1

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

write

ssize_t write(int fd,  const  void *buf, size_t count);

①功能:通过文件描述符向文件中写一串数据

②参数:fd:文件描述符;buf:要写入文件的字符串的首地址;count:要写入字符的个数

③返回值:成功---返回实际写入字节数,>=0都是对的;失败--返回 -1 

read

ssize_t read(int fd, void *buf, size_t count);

①功能:通过文件描述符读取文件中的数据

②参数:fd:文件描述符;buf:存放数据空间的首地址;count:要读到数据的个数

③返回值:成功--返回实际读取到的字节数;失败--返回 -1 

lseek

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

会覆盖掉原来的内容

①功能:定位光标的位置

②参数:fd:文件描述符;off_t :偏移量,  long 类型,有符号

③返回值:成功---返回偏移量;失败---返回-1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值