linux操作系统day2(io文件处理)

二进制文件读写:  fread()/fwrite()

读:

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

struct person
    {
        char name[20];
        int age;
        char sex;
        char addr[100];
    }; 
    
    //保存到一个文件中?
    //fwrite();
    
    
    person per;sizeof(per)

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

                                                                打印构造体内容

 计算bmp图片文件的高和宽


定位操作:

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);

 2.    ftell

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

 3. rewind(fp);

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

                                                                移动文件指针写入数据


      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值