linux文件编程--(2)fopen.fwrite.fread.fclose.fseek.fgetc.fputc.feof

本文详细介绍了C语言中的文件操作函数,包括fopen用于打开文件,fwrite和fread分别用于写入和读取文件内容,fclose用于关闭文件,以及fseek用于设置文件读写位置。通过实例演示了这些函数的使用方法,帮助读者理解C语言中的文件操作流程。
摘要由CSDN通过智能技术生成

fopen

函数原型

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

参数:
path:需要打开的文件路径
mode:文件打开方式(r 读 , w 写 , + 读和写,a 添加内容,b 二进制)
r 以只读方式打开文件,该文件必须存在
r+ 以可读写方式打开文件,该文件必须存在
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。(常用)
rb+ 读写打开一个二进制文件,允许读数据。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

    FILE *fp;//定义一个指向FILE结构的指针
   // 在当前路径用可读可写打开一个“ccc.txt”的文件,如果不存在则创建它
    fp=fopen("./ccc.txt","w+");

返回值
成功:它返回一个指向FILE结构的指针,该结构代表这个新创建的流
(文件顺利打开后,指向该流的文件指针就会被返回)
失败:它就会返回一个空指针,errno会提示问题的性质
(如果文件打开失败,则返回NULL,并把错误代码存在errno中)

fwrite

函数原型

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

ptr – 是一个指针,对fwrite来说,是要输出数据的地址。
size – 这是要读取的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

char *str="xixihaha!!!";
int write=fwrite(str,sizeof(char),strlen(str),fp);
//int write=fwrite(str,sizeof(char)*strlen(str),1,fp); 
//这种也可以 不过这样write的值为1,write的值和第三个参数有关系
//如果第三个参数为100,输出的write就是100
printf("write=%d \n",write);

write=11

返回值
如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

fread

函数原型

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

ptr – 是一个指针,对fread来说,它是读入数据的存放地址。
size – 这是要读取的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

char *readBuf=NULL;
char *str="xixihaha!!!";
readBuf=(char*)malloc(sizeof(char)*strlen(str));
//int read= fread(readBuf,sizeof(char)*strlen(str),1,fp);此时
第三个参数为1,那么read的值也是1,如果第三个参数改成2,输出结果read还是1
int read= fread(readBuf,sizeof(char),strlen(str),fp);
//read里,如果第三个参数为100,其输出结果也是11(有多少读多少)
printf("read=%d \n",read);
printf("%s\n",readBuf);

read=11
xixihaha!!!

返回值
成功读取的元素总数会以 size_t nmemb对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

fclose

原型:int fclose(FILE*f);
返回值:对于输出流,fclose函数会在文件关闭前刷新缓冲区,
如果它执行成功,fclose返回0

fseek

函数原型

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

第一个参数:stream为文件指针
第二个参数:offset为偏移量,整数表示右偏移,负数表示左偏移
第三个参数:
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件结尾
返回值
成功返回 0, 失败返回-1

fgetc()fputc()feof()

EOF

这个定义的意思是,文档的结尾都有一个隐藏字符”EOF”,当程序读取它的时候,就会知道文件已经到达结尾。通常使用while循环加EOF(通常为-1)判断作为读取结束的标志。

fgetc
ch=fgetc(fp);

从指定的文件读入一个字符,即从fp所指向的文件中读入一个字符赋给ch。

返回值
成功:返回值所得到的字符;
失败:返回EOF(-1)。

fputc

fputc(ch,fp);

把一个字符写到磁盘文件上去,即将字符ch输出到fp所指向的文件中去。

返回值
成功:返回值就是输出的字符;
失败:返回EOF(-1)。

feof

int main()
{
    FILE *fp;
    int i;
    char c;
    fp= fopen("./text.txt","r");
    while(1){
       c=fgetc(fp);//fgetc()读取字符后,光标会向后移动
       if(feof(fp)){
       //判断是否读到文件的末尾,如果
       //没有到达文件尾巴返回0,到达尾巴返回一个非零的整数。
       			break;
       }
       printf("%c",c);
    }
    printf("\n");
    fclose(fp);
    return 0;
}

结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值