C语言标准库I/O及其函数使用

文章详细介绍了C语言中的标准I/O函数,包括fopen用于打开文件,fclose关闭文件并刷新缓冲区,fread和fwrite分别用于文件的读取和写入,fseek改变文件流指针位置,ftell获取当前文件流位置,以及feof检测文件是否结束。示例代码演示了如何使用这些函数实现文件复制。
摘要由CSDN通过智能技术生成

标准I/O

标准I/O通过文件流指针(FILE *stream)来操作文件。
文件流:file stream/stdio stream
标准I/O提供了三种特殊的文件流,即;
stdin:标准输入流(终端输入)
stdout(终端输出)
strerr标准错误

标准I/O因为有缓冲机制,减少了系统调用的次数,进而缩小了系统开销。

标准I/O函数

fopen

打开一个文件,获取文件的文件流指针。

#include<stdio.h>

FILE *fopen(const char *pathname, const char *mode);

pathname即带路径的文件名,mode则是打开方式。
整个函数赋给文件流指针

mode

mode含义读写指针的位置
r只读读指针在文件开头
r+可读可写读写指针在文件开头
w只写,会截断文件,让文件长度为0,文件不存在则创建写指针在文件开头
w+可读可写会截断文件,文件不存在则创建读写指针在文件开头
a追加,问价不存在则创建写指针在文件末尾
a+可读可追加,文件不存在则创建读指针在文件开头,写指针在文件末尾

另外模式字母可以与“b”组合使用,表示以二进制形式操作文件。

fclose

用于关闭文件流,并刷新缓冲区。

#include <stdio.h>

int fclose(FILE *stream);

返回之成功为0,失败则为-1或者错误码。

fread

用于将文件数据读取到缓存中。

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

ptr存储读取来的数据的首地址。

size每一个都单元的大小,单位为byte,颗粒度大了会丢东西或EOF不准确,视所读取数据类型而确定。

nmemb想要读取的单元个数。

stream文件流指针。

返回值成功时为读取的单元个数,失败时返回0;返回值非常重要,在write时会用到,决定了写入量,精准定位EOF。

fwrite

用于将缓存中的数据写入目标文件中。

#include <stdio.h>

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

ptr存储将写入文件的缓存数据。

size每一个都单元的大小,单位为byte,颗粒度大了会丢东西或EOF不准确,视所写入数据类型而确定。

nmemb想要写入的单元个数。一般都是上一步fread函数的返回值。

stream文件流指针。

返回值成功时为写入的单元个数,失败时返回0。

fseek

修改文件流指针指向的位置。

#include <stdio.h>

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

stream文件流指针

whence为基准

offset文件基准起的偏移量单位为byte,向开头为负,向末尾则为正。

返回值成功为0,失败为-1。

whence含义
SEEK_SET文件开头
SEEK_CUR当前文件流指针位置
SEEK_END文件末尾

ftell

得到文件流指针当前位置到文件开头的字节数。

#include<stdio.h>

long ftell(FILE *stream);

stream为文件流指针

返回值成功为文件流指针到文件开头的字节数。

feof

判断文件流是否结束

int feof(FILE *stream);

返回值:文件流没有结束时为0,结束了则为非0整数。

函数使用例子

文件复制

int filecp(char *filename1,char *filename2){
    int rrn;
    char buffer[1024];
    FILE *r=fopen(filename1,"rb");
    FILE *w=fopen(filename2,"wb");
    while(0==feof(r)){
        memset(buffer,0,sizeof(buffer));
        rrn=fread(buffer,1,sizeof(buffer),r);
        fwrite(buffer,1,rrn,w);
    }
    fclose(r);
    fclose(w);

    return 0;
}

将文件1复制到文件2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值