首页 > 其他分享 >学习笔记2

学习笔记2

时间:2023-09-17 15:24:43浏览次数:45  
标签:fp 文件 fread 写入 笔记 学习 size 库函数

关于知识点

知识点归纳

第九章

  • 9.1 I/O库函数
    系统调用是文件操作的基础,但它们只支持数据块的读/写。I/O库函数是一系列文件操作函数,既方便用户使用,又提高了整体效率。
  • 9.2 I/O库函数与系统调用
    I/O库函数是封装了系统调用的一组高层函数接口,用于进行输入输出操作。它们提供了一种简便的方式来进行文件和设备的读写操作,并隐藏了底层系统操作的细节。而系统调用是操作系统提供的一组接口,用于访问硬件设备和其他资源。
    • 缓冲机制:I/O库函数通常会使用缓冲区来提高读写的效率。它们会将数据暂时存储在内存中的缓冲区中,然后进行一次性的读写操作。
    • 文件操作:I/O库函数和系统调用都可以用于对文件进行读写操作。I/O库函数如fopen()fwrite()提供了更简单的接口来打开文件和写入数据,而系统调用如open()write()则提供了底层的文件操作接口。
    • 标准输入输出:I/O库函数提供了对标准输入输出的访问接口,如printf()scanf()用于标准输出和输入流的格式化读写。而系统调用对应的是标准输入输出的文件描述符(stdin、stdout和stderr)。
    • 错误处理:I/O库函数通常会返回特定的值来指示出错情况,如EOF表示文件结束,而系统调用通常会返回-1来表示出错。并且,I/O库函数会设置全局变量errno来指示具体的错误类型。
    • 设备和网络操作:I/O库函数通常用于对设备和网络进行操作,如fread()fwrite()可以用于读写二进制数据,而系统调用如socket()send()则用于创建和操作网络套接字。
  • 9.3 I/O库函数的算法
    • fread算法

fread是C语言中的一个I/O库函数,用于从文件中读取二进制数据。它的函数原型如下:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

fread函数从给定的文件流stream中读取count个元素的数据,每个元素的大小由size指定,并将读取的数据存储到由ptr指针指向的内存空间中。读取的总字节数被返回。

fread函数的工作原理如下:

  1. fread首先检查文件流的位置指针,确定将要读取的数据的位置。
  2. 它会按照元素的大小size和要读取的元素数量count计算出需要读取的总字节数。
  3. fread会尽可能从文件中读取足够的字节数,以填满指定的内存空间。如果读取的字节数小于请求的字节数,可能是因为已经到达了文件结尾或者发生了错误。
  4. 读取的数据被存储到由ptr指针指向的内存空间中。
  5. fread会返回实际读取到的元素数量(即总字节数除以size)。如果返回的值少于请求的元素数量,可能表示已经到达了文件结尾或者发生了错误。

需要注意的是,fread函数适用于读取二进制数据,对于文本数据的读取,应该使用fgetsfscanf等函数。

下面是一个示例的代码段:

#include <stdio.h>

int main() {
    FILE *fp;
    int data[5];
    
    // 打开文件
    fp = fopen("data.txt", "rb");
    if (fp == NULL) {
        printf("打开文件失败
");
        return 1;
    }
    
    // 读取数据
    size_t elements = fread(data, sizeof(int), 5, fp);
    if (elements != 5) {
        printf("读取文件失败
");
        fclose(fp);
        return 1;
    }
    
    // 输出数据
    for (int i = 0; i < 5; i++) {
        printf("%d ", data[i]);
    }
    
    // 关闭文件
    fclose(fp);
    return 0;
}

以上代码简单展示了fread算法的用途。

- *fwrite算法*

fwrite是C语言中的一个I/O库函数,用于将二进制数据写入文件。它的函数原型如下:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

fwrite函数将由ptr指针指向的内存中的二进制数据写入到给定的文件流stream中。要写入的数据有count个元素,每个元素的大小由size指定。写入的总字节数被返回。

fwrite函数的工作原理如下:

  1. fwrite会将指定内存中的二进制数据按照元素大小size和要写入的元素数量count计算出写入的总字节数。
  2. 它会将计算出的字节数的数据从内存写入到文件流中。
  3. fwrite会更新文件流的位置指针,使其指向已写入数据的下一个位置。
  4. 如果所有数据都成功写入文件,则返回写入的元素数量(即总字节数除以size)。如果返回的值少于请求写入的元素数量,可能表示发生了错误。

需要注意的是,fwrite函数适用于将二进制数据写入文件,对于文本数据的写入,应该使用fprintffputs等函数。

下面是一个示例的代码段:

#include <stdio.h>

int main() {
    FILE *fp;
    int data[] = {10, 20, 30, 40, 50};
    
    // 打开文件
    fp = fopen("data.txt", "wb");
    if (fp == NULL) {
        printf("打开文件失败
");
        return 1;
    }
    
    // 写入数据
    size_t elements = fwrite(data, sizeof(int), 5, fp);
    if (elements != 5) {
        printf("写入文件失败
");
        fclose(fp);
        return 1;
    }
    
    // 关闭文件
    fclose(fp);
    return 0;
}
- *fclose算法*

`fclose 是C语言中的一个I/O库函数,用于关闭一个已打开的文件流。它的函数原型如下:

int fclose(FILE *stream);

fclose 函数用于结束对文件的操作,并将与文件流 stream 相关的资源释放。它的工作原理如下:

  1. fclose 会将尚未写入到文件的缓冲区的数据写入文件,以确保数据的完整性。

  2. 它会关闭文件流 stream,这意味着不能再通过该文件流进行读写操作。关闭文件流会释放与文件流相关的资源,如文件描述符。

  3. 如果成功关闭文件流,fclose 返回 0。如果关闭失败,它会返回一个非零值,通常是 EOF

  4. 在关闭文件流之后,应该避免再次使用已关闭的文件流进行读写操作,因为这可能导致未定义的行为。
    下面是一个示例代码段:

#include <stdio.h>

int main() {
    FILE *fp;
    
    // 打开文件
    fp = fopen("data.txt", "w");
    if (fp == NULL) {
        printf("打开文件失败
");
        return 1;
    }
    
    // 写入数据
    fprintf(fp, "Hello, world!");
    
    // 关闭文件
    if (fclose(fp) == 0) {
        printf("文件已成功关闭
");
    } else {
        printf("关闭文件失败
");
    }
    
    return 0;
}

在上述示例中,fclose 函数用于关闭文件流 fp,以确保数据被写入文件并释放相关资源。

  • 9.4 使用I/O库函数或系统调用
  • 9.5 I/O库模式
    • 字符模式I/O
    • 行模式I/O
    • 格式化I/O
    • 其他I/O库函数
  • 9.6 文件流缓冲
    • 无缓冲
    • 行缓冲
    • 全缓冲
  • 9.7 变参函数

苏格拉底挑战

问题1:文件流缓冲

问题2:I/O库函数的算法

遇到问题以及实践过程截图

问题1:fread算法的操作实例



标签:fp,文件,fread,写入,笔记,学习,size,库函数
From: https://www.cnblogs.com/zy1116/p/17708335.html

相关文章

  • 学习笔记2
    第9章I/O库函数——教材知识点归纳9.1~9.2系统调用和I/O库函数系统调用:操作系统中,进程以两种不同的方式运行:内核模式(Kmode)和用户模式(Umode)。Umode权限有限,特殊权限的操作需要在Kmode下进行。系统调用(SystemCall)机制允许进程进入Kmode,执行更高权限的操作。系统调用和I/O库函......
  • 珍惜环境,好好学习,感恩 单词
    珍惜环境,好好学习,感恩  有食物吃,有空调,就好好学习。日子怎么过的,就是有东西吃,有适宜的温度来之不易,就好好学习。   单词学习笔记:什么意思呀?这个意思对应是什么?怎么拼写呢?直背。看课本,拼写读三遍。不会的看课本加深印象。及时巩固。每天10分钟,20分钟。不熟就看书,看正确......
  • 《信息安全系统设计与实现》第二周学习笔记
    《信息安全系统设计与实现》第二周学习笔记第九章I/O库函数系统调用函数系统调用系统调用函数open():打开和创建文件read():读文件write():写文件lseek()close()I/O库函数fopen():以指定的形式打开文件fread():从给定流stream读取数据到ptr所指向的数组中fwrit......
  • 02博客:Java学习思维导图
    Java学习思维导图这一个学期学习规划安排动态调整第一个月到第二个月:重点学习、巩固并初步掌握Java入门基础知识第三个月:巩固Java基础这个阶段与其他课程有交叉部分需要一起巩固大概一个月到一个半月第四个月:与阶段三相对应,包含了MySQL、JavaWeb、Git、Linux等内容的学......
  • 《Unix/linux系统编程》教材第9章学习笔记
    结构化教材内容第9章:I/O库函数I/O库函数与系统调用系统调用是文件操作的基础,但它们只支持数据块的读/写。系统调用函数:open()、read()、write()、lseek()、close();I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose();I/O库函数的根都在对应的系统调用函数中,例fopen()......
  • 高级系统架构师学习(五)软件架构设计-下篇
    一、大型网站系统架构演化【高速发展阶段】第四阶段【使用服务集群改善网站并发处理能力】背景:用户的请求由谁来转发到具体的应用服务器?用户如果每次访问到的服务器不一样,那么如何维护session的一致性?负载均衡分类:基于特定软件的负均衡(HTTP重定向)【应用层】反向......
  • yzy第二次学习笔记
    第九章I/O库函数本章讨论了I/O库函数;结识了I/O库函数的作用及其对于系统调用的优势;使用示例程序来说明I/O库函数和系统调用之间的关系,并解释了他们之间的相似性和基本区别;详细介绍了IO库函数的算法,包括fread、fwrite和fclose的算法,重点介绍了它们与read、write和close系统调......
  • 12 表单学习
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>学习表单</title></head><body><h1>学习表单</h1><formaction="表格标签.html"method="pos......
  • Unix/Linux系统编程学习笔记二
    学习笔记二一、教材知识点总结1.I/O库函数程序(1)fopen()使用字符串表示模式,其中"r"表示READ"w"表示WRITE。它返回一个指向FILE结构体的指针。fopen()首先发出open()系统调用来打开文件,以获取文件描述符编号fd。如果open0系统调用失败,则fopen()会返回一个NULL指针。否则,它会......
  • 学习笔记2
    对于C语言中的文件操作:字符读写:getc:从文件中读取一个字符。putc:将一个字符写入文件。行读写:fgets:从文件中读取一行文本。fputs:将一行文本写入文件。getline:动态地读取一行文本。任意位置读写:fseek:定位文件指针到指定位置。ftell:获取当前文件指针的位置。rew......