当前位置:   article > 正文

标准C库文件操作

标准C库文件操作

open 系列API 和 fopen系列API的区别

1.来源:
-open 是UNIX系统调用函数(包括LINUX系统),返回的是文件描述符
-fopen是ANSIC标准的C语言库函数,在不同系统重调用不同内核的API

2.移植性:
fopen 是C标准函数,具有良好的移植性;
而opne是unix系统调用,移植性有限(砸死window下运行怒了,可以用功能一样的CreateFile调用)

3.适用范围:
open返回文件操作符,在unix系统下使用,可以硬件设备对接
fopen 用来操作普通正规文件

4.文件IO层次:
open里系统内核更接近,属于低级文件IO,运行在内核态,高级文件IO运行在用户态(缓冲区)

5.缓冲:
fopen --缓冲文件系统,设置文件结构体指针, 等一堆f开头的api都是在缓冲区运行 -- 执行速度快,效率高。
open --非缓冲文件系统,无文件结构体指针,值读写二进制文件,效率高,速度快
总结: open 无缓冲,fopen有缓冲

由于fopen渔鸥缓冲,减少了用户态和内存太的切换,而open每次都需要切换;
if 顺序访问文件的话,fopen的效率更高,随机访问的话计算open的效率高

==================================================

fopen系列API调用:


fopen:

FILE  *fopen(char *filename,char *mode);


=============================


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

int main()
{
FILE * fp;
char *str="mxjun hen shuai!";
char readBuf[128]={0};
fp=fopen("./mxj.txt","w+");

fwrite(str,sizeof(char),strlen(str),fp);
fwrite(str,sizeof(char)*strlen(str),1,fp);

fseek(fp,0,SEEK_SET);
    //size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread(readBuf,sizeof(char),strlen(str),fp);
printf("read data:%s\n",readBuf);
fclose(fp);
    return 0;
}


==================


标准C库结构体写入文件:

//读写返回值的区别:
指定 写的个个数 >  实际 接收到的个数,返回值是大值(不够写了'\0'补充)
而指定读的个数更大,返回值只能是小者,算指定最大读取数


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

struct Test
{
int a;
char b;
};

int main()
{
FILE * fp;
struct Test data ={100,'a'};\
struct Test data2;

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

fwrite(&data,sizeof(struct Test),1,fp);


fseek(fp,0,SEEK_SET);
    //size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread(&data2,sizeof(struct Test),1,fp);
printf("read data2:%d    %c\n",data2.a,data2.b);
fclose(fp);
    return 0;
}

===========================


fputc()  --  一次将一个字符的写入文件


函数原型:
   int fputc(int c, FILE *stream);


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


int main()
{
    FILE *fp;
    int i;
    char *str="mxjun giegie!!!";
    int len=strlen(str);
    fp = fopen("./stest.txt", "w+");
     for(i=0;i<len;++i)
     {
     fputc(*str,fp);
      str++;
     }
    fclose(fp);
    return 0;
}

feof()  fgetc()


feof() -- 判断是否到文件尾巴 --到尾巴返回0

fgetc() --读取文件字节

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


int main()
{
    FILE *fp;
    int i;
    char c;
    fp = fopen("./stest.txt", "r");
     while(!feof(fp)){
     c=fgetc(fp);
     printf("%c",c);
    
     }


    fclose(fp);
    return 0;
}


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/420809
推荐阅读
相关标签
  

闽ICP备14008679号