Linux -- 标准IO库文件

1、标准IO库文件是系统调用文件IO进行开关读写操作的,如fopen()调用open()函数,相对移植方便和性能高效。

2、FILE指针,类似文件IO函数返回的文件描述符fd, FILE指针是一个结构体。

3、操作标准文件

  ①、调用包含头文件 #include  <stdio.h>

  ②、打开文件:FILE* fopen(const char *path, const char *mode)

    *path: 指向路径,可以绝对路径或相对路径

    *mode : 对文件读写权限(r, r+, w, w+, a, a+)

  ③、关闭文件:int fclose(FILE *stream)

    *stream:  文件指针,关闭成功返回0,失败返回EOF(也是-1),通过设置errno来指示错误原因

  ④、读出文件:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 

    *ptr:文件读出数据存放在ptr指向的缓存区;

    size:数据项的大小

    nmemb:读取数据项的个数

    *stream:文件指针

  ⑤、写入文件:size_t fwrite(const void *ptr, szie_t size, size_t nmemb, FILE *stream)

    *ptr:ptr指向的缓存区数据写入文件;

    size:数据项的大小

    nmemb:读取数据项的个数

    *stream:文件指针

  ⑥、偏移定位:int fseek(FILE *stream, long offset, int whence);

    *stream : 文件指针

    *offset : 偏移量

    *whence : 偏移起始位置(SEEK_SET,SEEK_CUR,SEEK_END)

    fseek(fp, 0, SEEK_SET); //将文件的读写位置移动到文件开头处

    fseek(fp, 0, SEEK_END); //将文件的读写位置移动到文件末尾

    fseek(fp, 1024, SEEK_SET); //将文件的读写位置移动到 100 个字节偏移量处

  ⑦、获取偏移量:long ftell(FILE *stream)

  示例:

  #include <stdio.h>

  #include <stlib.h>

  int main(void){

    char wr_buf[]="hello linux\n";

    char rd_buf[128]={0};

    FILE *fp = NULL;

    int ret=0;

  

    if(NULL == (fp=fopen("./test.txt","w+"))){

      perror("fopen error");

      exit(-1);

    }

    print("file open ok\n");

    if(sizeof(wr_buf) > fwrite(wr_buf, 1, sizeof(wr_buf), fp)){

        printf("file write error\n");

        fclose(fp);

        exit(-1);

    }

    printf("file write ok\n");

    

    if(0 > fseek(fp, 0, SEEK_SET)){

      perror("file seek error");

      fclose(fp);

      exit(-1);

    }

    if(sizeof(wr_buf) > (ret = fread(rd_buf, 1, sizeof(wr_buf), fp))){

        printf("file read error\n");

        fclose(fp);

        exit(-1);

    }

    printf("read file %d data:%s\n", ret, rd_buf);

    

    fclose(fp);

    exit(0);

  }

    

 

posted @ 2024-01-26 12:45  zbl1118  阅读(24)  评论(0)    收藏  举报