C语言基础知识--文件的顺序读写与随机读写

复制代码
// fwirte 和 fread

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

// fread (void *ptr, size_t size, size_t nmemb, FILE *stream); //二进制读
// fwrite (const void *ptr, size_t size, size_t nmemb, FILE *stream); //二进制写 ,写数据块到文件流
// struct  Person {
//     char name[20];
//     int age;
//     float score;
// };
// int main  () {
//     // 打开文件
//    // struct Person p = {"张三", 18, 90.5};
//    // FILE *fp = fopen ( "test.txt" , "wb" );
//    struct Person p = {0};
//     FILE *fp = fopen ( "test.txt" , "rb" );
//     // 判断文件是否打开成功
//     if ( fp == NULL ) {
//         perror("fopen");
//         return -1;
//     }
//     // 写数据块到文件流
//     // fwrite ( &p , sizeof(struct Person) , 1 , fp );
//     // 读取成功后,返回实际读到的个数
//     fread(&p, sizeof(struct Person), 1, fp);  // 读取数据块 从文件里读1个大小为 Person 的数据块 放到 p 中
//     // 输出数据
//     printf ("%s %d %.2f\n", p.name, p.age, p.score);
//     // 关闭文件
//     fclose ( fp );
//     fp = NULL;
//     return 0;
//
// }


// 文件的随机读写
// fseek: 文件指针的偏移
// fseek ( FILE *stream , long offset , int whence );
// offset :偏移的字节数 可以正负
// whence 0:从文件开头开始偏移 1:从当前位置开始偏移 2:从文件末尾开始偏移 offset:偏移的字节数 可以正负
// ftell : 输出文件指针相较于起始位置的偏移量
// ftell(fp)
// rewind : 将文件指针重新定位到文件起始位置
// rewind(fp)

// struct Person {
//     char name[32];
//     int age;
//     float height;
// };
// int main () {
//     FILE *fp = fopen("test56.txt" , "r");
//     if ( fp == NULL ) {
//         return -1;
//     }
//     int ch = 0;
//     // SEEk_CUR:从当前位置开始偏移
//     // SEEK_END:从文件末尾开始偏移
//     // SEEK_SET:从文件开头开始偏移
////     fseek(fp , 2 , SEEK_SET);
//     fseek(fp , -2 , SEEK_END);
//     ch = fgetc(fp);
//     printf ("%c\n", ch);
//     // 输出文件指针相较于起始位置的偏移量
//     printf ("%ld\n", ftell(fp));
//     // 让文件指针回到起始位置
//     rewind(fp);
//     ch = fgetc(fp);
//     printf ("%c\n", ch);
//     // 关闭文件
//     fclose(fp);
//     fp = NULL;
//     return 0;
// }


// 文件结束的判定
// 1、 被错误使用的 feof函数 ,是用于判断文件指针是否已经到达文件末尾。
// 2、 读取文件结束的原因: 1、文件结束符 EOF ,2、遇到错误
// 3、 文本文件的结束: fgetc 函数返回 EOF ,fgets 函数返回 NULL
// 4、 二进制文件的结束: fread 函数返回 值是否小于实际要读的个数
// 5、 文件结束的判定: feof 函数(检查文件是否结束),ferror 函数: 检测文件是否结束,返回错误状态值

//enum {
//    size = 10
//};
//int main(){
//    double s[size] ={1,2,3,4,5,6,7,8,9,10}
//    FILE *fp1 = fopen("test1.txt" , "r");
//
//}

// 拷贝 test1 文件的数据到 test2 文件中
//int main(){
//    // 打开文件
//    FILE *fpread = fopen("test1.txt" , "r");
//    if ( fpread == NULL ) {
//        perror("fopen");
//        return -1;
//    }
//    FILE *fpwrite = fopen("test2.txt" , "w");
//    if ( fpwrite == NULL ) {
//        perror("fopen");
//        fclose(fpread);
//        return -1;
//    }
//    // 读写文件
//    int ch = 0;
//    while ( (ch = fgetc(fpread)) != EOF ) // 不等于eof 则代表正常
//    {
//        fputc(ch , fpwrite);
//    }
//    // 关闭文件
//    fclose (fpread);
//    fpread = NULL;
//    fclose (fpwrite);
//    fpwrite = NULL;
//    return 0;
//}

// 文件缓冲区 :所谓缓冲区,就是把数据先暂存到一个缓冲区中,然后再一次性写入文件。
// 所谓缓冲区是指系统自动地在内存中为程序每一个正在使用的文件开辟一块缓冲区,从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后,再把缓冲区中的数据写入磁盘。
// 关闭文件也会刷新缓冲区
// 如果不刷新缓冲区,数据可能会丢失。

// 编译和链接
// 翻译环境和运行环境
// 翻译环境: 编译和链接 生成可执行文件程序 .exe  文件
// 编译: 预处理 、编译、汇编、 链接
// 运行环境:  运行程序
// 源文件经过编译器 编译处理生成 .obj 目标文件 ,通过链接库工作生成链接文件 .exe
// 链接库是指运行时环境所依赖的库文件
// 多个目标文件和链接库一起经过链接生成可执行文件
// 编译器的三个执行过程:.c/.h 预处理生成.i的文件、编译 .s 文件、汇编 生成 .obj 文件 链接生成可执行文件
//extern int ADD(int a,int b);
//int main(){
//    int a = 10;
//    int b = 20;
//    int c =ADD(a,b);
//    printf("c = %d\n",c);
//    return 0;
//}
相关推荐
回家路上绕了弯21 分钟前
线程池优化实战:从性能瓶颈到极致性能的演进之路
java·后端
小苏兮21 分钟前
飞算JavaAI深度解析:专为Java生态而生的智能引擎
java·开发语言·人工智能·java开发·飞算javaai炫技赛
黑色的山岗在沉睡23 分钟前
【无标题】
数据结构·c++·算法·图论
2301_785038181 小时前
c++初学day1(类比C语言进行举例,具体原理等到学到更深层的东西再进行解析)
c语言·c++·算法
用户84913717547162 小时前
JDK 17 实战系列(第4期):安全性与稳定性增强详解
java·后端·性能优化
自由的疯2 小时前
java程序员怎么从Python小白变成Python大拿?(三)
java·后端·trae
用户84913717547162 小时前
JustAuth实战系列(第4期):模板方法模式实战 - AuthDefaultRequest源码剖析
java·后端·架构
weixin_411191842 小时前
安卓Handler和Looper的学习记录
android·java
星期天要睡觉2 小时前
机器学习——支持向量机(SVM)
算法·机器学习·支持向量机·svm
已读不回1432 小时前
LRU算法在前端性能优化中的实践艺术(缓存请求函数为例)
javascript·算法