使用C操作文件的两种方式及其区别

以Linux为例,用C代码操作文件一般有两种方法,一种是使用POSIX的函数操作文件(使用fd句柄,称为句柄法),另外则是使用LIBC提供的函数(使用FILE,称为指针法)。

句柄法的例程如下:

int main(void)
{
  int fd;
  int numbytes;
  char path[] = "file";
  char buf[256];
  fd = open(path, O_CREAT | O_RDONLY, 0644);
  memset(buf, 0x00, 256);
  while((numbytes = read(fd, buf, 255)) > 0)
  {
    // ...
    memset(buf, 0x00, 256);
  }
  close(fd);
}


第二种指针法的例程如下:

int main(void)
{
  FILE *fr;
  int n;
  long elapsed_seconds;
  char line[80];
  fr = fopen ("elapsed.dta", "rt");  /* open the file for reading */
  while(fgets(line, 80, fr) != NULL)
  {
    // ...
  }
  fclose(fr);
}


两者的区别在于:

(1)句柄法没有buffer,所有的读写操作都是直接操作IO,因为IO速度慢,所以导致整体读取效率不高;而指针法默认提供了buffer,读取文件读取使用缓存后,可以减少IO操纵次数,提高IO效率,从而提高了性能。用户可以使用void setbuf ( FILE * stream, char * buffer )来改变buffer大小,或者将buffer设为NULL从而禁止buffer。

(2)采用指针法,C提供了大量要求FILE的函数,如从文件中读一行数据等。

BTW,对于FILE的指针法,一般读写文本文件使用fgetc/fputc/fgets/fputs/fscanf/fprintf,对于二进制文件则使用fread/fwrite

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值