Linux 1.文件编程(fopen、fwrite、fseek、fread、flose、fputc、fgetc、feof)

fopen

fopen功能

使用给定的模式mode打开filename所指向的文件。

fopen头文件及原型

#include <stdio.h>

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

fopen参数

filename:这是 C 字符串,包含了要打开的文件名称。

mode:这是 C 字符串,包含了文件访问模式。

在这里插入图片描述

fopen返回值

成功:指向该流的文件指针就会被返回。

失败:则返回NULL,并把错误代码存在error中。

fwrite

fwrite功能

把ptr所指向的数组中的数据写入到给定流stream中。

fwrite头文件及原型

#include <stdio.h>

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

fwrite参数

ptr:这是指向要被写入的元素数组的指针。

size: ; 这是要被写入的每个元素的大小,以字节为单位。

nmemb:这是元素的个数,每个元素的大小为 size 字节。

stream:这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。

fwrite返回值

成功:该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。(就是nmemb的值)

失败:返回的数字与 nmemb 参数不同,则会显示一个错误。

注意:写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

fseek

fseek功能

重定位流(数据流/文件)上的文件内部位置指针

fseek头文件及原型

#include <stdio.h>

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

fseek参数

stream:文件指针
offset:偏移量,正数表示正向偏移,负数表示负向偏移
whence:设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾

其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2

简言之:

fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;
fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。

fseek返回值

成功,返回0
失败:返回非0值,并设置error的值,可以用perror()函数输出错误。

fread

fread功能

从给定流 stream 读取数据到 ptr 所指向的数组中。

fread头文件及原型

#include <stdio.h>

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

fread参数

ptr:这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。

size:这是要读取的每个元素的大小,以字节为单位。

nmemb:这是元素的个数,每个元素的大小为 size 字节。

stream:这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

fread返回值

成功:读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。

错误:如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

fclose

fclose功能

C 库函数int fclose(FILE *stream)关闭流 stream。刷新所有的缓冲区。

fclose头文件与原型

#include <stdio.h>

int fclose(FILE *stream)

fclose参数

stream:这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流。

fclose返回值

成功:该方法返回零。

失败:则返回 EOF

综合运用(fopen、fwrite、fseek、fread、flose)

#include <stdio.h>
#include <string.h>

int main()
{
        FILE* fp;
        char* ptr="Yinyuer is a pretty girl!";
        char readBuf[128]={0};

//      FILE *fopen(const char *pathname, const char *mode);
        fp=fopen("./Yinyuer.txt","w+");

//      size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
        int n_write=fwrite(ptr,sizeof(char),strlen(ptr),fp);

        fseek(fp,0,SEEK_SET);

//      size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
        int n_read=fread(readBuf,sizeof(char)*strlen(ptr),1,fp);

        printf("%s\n",readBuf);
        printf("n_write=%d n_read=%d\n",n_write,n_read);

        fclose(fp);

        return 0;
}

运行结果

在这里插入图片描述

在这里插入图片描述

fputc

fputc功能

从给定流 stream 读取数据到 ptr 所指向的数组中。

fputc头文件及原型

#include <stdio.h>

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

fputc参数

ptr:这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。

size:这是要读取的每个元素的大小,以字节为单位。

nmemb:这是元素的个数,每个元素的大小为 size 字节。

stream:这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

fputc返回值

成功:读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。

错误:如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

fputc使用示例

#include <stdio.h>
#include <string.h>

int main()
{
        int i=0;
        FILE* fp;
        char* ptr="Zillion is a handsome boy!";

        fp=fopen("./Yinyuer.txt","w+");
		
        int len=strlen(ptr);
        for(i=0;i<len;i++)
        {
                fputc(*ptr,fp);
                ptr++;
        }
		
		fclose(fp);
		
        return 0;
}

运行结果

在这里插入图片描述

fgetc

fgetc功能

从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。

fgetc头文件及原型

#include <stdio.h>

int fgetc(FILE *stream)

fgetc参数

stream:这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流。

fgetc返回值

该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

feof

feof功能

检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值;文件未结束:返回0值)

feof头文件及原型

#include <stdio.h>

int feof(FILE *stream)

feof参数

stream:这是指向 FILE 对象的指针,该 FILE 对象标识了流。

feof返回值

文件结束:返回非0值;
文件未结束:返回0

示例(fgetc、feof)

#include <stdio.h>
#include <string.h>

int main()
{
        FILE* fp;
        char c;

        fp=fopen("./Yinyuer.txt","r");

        while(1)
        {
                c=fgetc(fp);
                printf("%c",c);

                if(feof(fp))
                {
                        break;
                }
        }

        fclose(fp);

        return 0;
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值