Linux学习day2

本文详细介绍了C语言中二进制文件操作的关键函数fread()和fwrite(),以及文件定位函数fseek(),ftell(),rewind()的工作原理、参数和返回值。这些函数在处理数据流时至关重要,特别在文件读写、文件大小获取和空洞文件生成等方面有广泛应用。
摘要由CSDN通过智能技术生成

    
二进制文件读写:  fread()/fwrite()
    
int a = 2 ;
vim -t size_t 
读:size_t  fread(void  *ptr,  size_t size, size_t nmemb, FILE *stream);
功能:
      从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr
      所在的本地内存中。
参数:
      ptr    要存储数据的本地内存一般是数组或者结构体指针
      size   单个数据块的元数据大小。最小单元的大小
      nmemb  要获取的数据块的个数,拷贝的数据块个数。
      stream 要获取数据的源文件流对象,如果是stdin表示从
      键盘获取数据,如果是fp文件则表示从普通文件获取。
返回值:
        成功 小于等于nemeb的整数,表示获取的数据长度
        失败 小于0,结尾 0;

写:size_t fwrite(const void  *ptr,  size_t  size,size_t nmemb, FILE *stream);
功能:
      从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应
      的文件流对象中。
参数:ptr 要写的数据块地址,一般是数组或者结构体指针
      size  要写的数据块元数据大小,单位是字节
      nmemb 要写的数据块的个数
      stream 要写的目标文件流对象。如果是stdout则表示数据会
      写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。

返回值:成功 小于等于nmemb 的个数。
        失败 <0

    
注:
  fread fwrite 往往都是 处理 ,数据格式相对固定的数据 


//定位操作:
标准IO之文件定位函数:
fseek()   
ftell()  
rewind()

    1.fseek
    int fseek(FILE *stream, long offset, int whence);//long -->signed long 
    功能:
          将stream流文件中的文件指针
          从whence位置开始
          偏移offset字节的长度。
          
    参数:
          stream  要移动文件指针的目标文件流对象。 
               注意:不支持设备文件,一般用于普通文件。  
          offset  
                  要在文件内偏移的距离,单位字节。
                  如果值为整数,则向文件末尾偏移
                  如果值为负数,则向文件开头偏移
                  
          whence  偏移的起始位置,由系统定义的三个宏开始。
            SEEK_SET  文件的开头位置   offset 只能是正值 
            SEEK_CUR  文件的当前位置   offset 可正 可负 
                                       但是 
                                       如果当前位置与 SEEK_SET重合 offset 不能是负的 
                                       
            SEEK_END  文件的末尾位置   offset 可正 可负 
                                       正 --- 空洞文件 
                             
    返回值:    
        成功: 返回 0
        失败:  -1;
        eg:
        
        fseek(fp,100,SEEK_SET); //从头开始往后偏移100个字节 
        fseek(fp,-100,SEEK_SET);
        

如果从文件的指定位置向后偏移过程中已经超过了文件
的当前末尾位置,则会自动以'\0'来填充文件内容,从
而形成一种被称为"空洞文件" 的特殊文件。

产生空洞文件的操作:
1.进行偏移 
2.做一次写操作 
  fputc(0,fp);
  
  .downloading
  
用途:
   提前抢占磁盘空间
  

//获取文件大小:
     fseek(fp,0,SEEK_END);
     len = ftell(fp);
//定位到文件开头      
fseek(stream,0L,SEEK_SET); <==>rewind(fp);
//定位到文件尾部 
fseek(stream,0L,SEEK_END);


          
    作用:   //1.获取源文件大小 
         
      //2. 在本地 创建 空洞文件 
     
      //3.复制文件 

     2.    ftell
        long ftell(FILE *stream);
        
        功能:获取文件位置指示器的偏移量
        参数:求偏移量的文件流指针
        返回值:文件位置指示器到文件开头的偏移字节数

     3. rewind(fp);
         void rewind(FILE *stream)
        功能:
             获取当前文件流指针的具体位置,
             一般以文件开头到当前指针的字节数为返回值。
             
        参数:stream 要返回指针距离的文件流对象
        返回值:void


rewind()  等效于:
fseek(stream,0L,SEEK_SET);

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值