Linux文件操作(3)关于fopen的相关运用

fopen的原型

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

path是C字符串,包含要打开的文件名称。
mode是C字符串,包含文件访问模式,如下:
“r” :打开一个用于读取的文件。该文件必须存在。
“w” :创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
“a” :追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
“r+” :打开一个用于更新的文件,可读取也可写入。该文件必须存在。
“w+” :创建一个用于读写的空文件。
“a+” :打开一个用于读取和追加的文件。

fwrite和fread的原型

 #include <stdio.h>
       size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
       size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

ptr – 这是指向要被写入的元素数组的指针。
size – 这是要被写入的每个元素的大小,以字节为单位。
nmemb – 这是元素的个数,每个元素的大小为 size 字节。
stream – 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
关于光标的位置
原型int fseek(FILE *stream, long offset, int whence);与lseek()的运用相同

实列

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

int main()
{

   FILE *fp;
   char *str="Linux study";
   char readBuf[128]={0};


   fp=fopen("./file.text","w+");//创建一个用于读写的空文件

   fwrite(str,sizeof(char),strlen(str),fp);
   fseek(fp,0,SEEK_SET);//将光标移动到头在进行读取
   fread(readBuf,sizeof(char),strlen(str),fp);

   printf("rend data:  %s\n",readBuf);
	fclose(fp);
    return 0;
}

关于fwrite和fread的返回值
fwrite的返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。该数字与 nmemb 参数相同。

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

实列

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

int main()
{

   FILE *fp;
   char *str="Linux study";
   char readBuf[128]={0};


   fp=fopen("./file.text","w+");

  // int nwrite=fwrite(str,sizeof(char),strlen(str),fp);
   int nwrite=fwrite(str,sizeof(char),100,fp);
    fseek(fp,0,SEEK_SET);
   int nread=fread(readBuf,sizeof(char),strlen(str),fp);

   printf("rend data:  %s\n",readBuf);
   printf("read=%d,write=%d\n",nread,nwrite);
   fclose(fp);
    return 0;
}

缓冲区为结构体

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

struct Test
{
   int a;
   char c;
};
int main()
{
  FILE *fp;
  struct Test data={100,'a'};
  struct Test data2;
  fp=fopen("./file","w+");

  int n_write= fwrite(&data,sizeof(struct Test),1,fp);//注意第一个参数要记得加上取地址符号&,第二个参数是整个结构体的大小

   fseek(fp,0,SEEK_SET);
  int n_read=fread(&data2,sizeof(struct Test),1,fp);

  printf("read %d,%c\n",data2.a,data2.c);
   fclose(fp);

   return 0;
}

fputc()、fgetc()和feof()的用法

fputc()的用法

#include<stdio.h>
#include<string.h>
int main()
{
        FILE *fp;
        int i;
        char *str="Linux study study";
        int len=strlen(str);


        fp=fopen("./test.txt","w+");

        for(i=0;i<len;i++)
        {
                fputc(*str,fp);
                str++;
        }//将str中的内容写入到test.txt中
        
        fclose(fp);
        return 0;
}

fgetc()和feof()的用法

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

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

        fp=fopen("./test.txt","r");//只读方式打开,test.txt已经存在,并且已有内容

        while(!feof(fp)){

                c=fgetc(fp);
                printf("%c",c);
        }

        fclose(fp);
        return 0;
}

fputc()、fgetc()和feof()的结合
注意:光标的位置

#include<stdio.h>
#include<string.h>
int main()
{
        FILE *fp;
        int i;
        char *str="Linux study study";
        int len=strlen(str);
        char c;


        fp=fopen("./test.txt","w+");

        for(i=0;i<len;i++)
        {
                fputc(*str,fp);
                str++;
        }//将str中的内容写入到test.txt中

		fseek(fp,0,SEEK_SET);
		 while(!feof(fp)){test.txt
                c=fgetc(fp);
                printf("%c",c);
        }//将test.txt文件中的内容读取到c中	
        
        fclose(fp);
        return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值