逸致

导航

学习笔记2

学习笔记:I/O库函数知识点

知识点归纳

1.系统调用函数
open() 、 read() 、 write() 、 lseek() 、 close()

2.I/O库函数
fopen() 、 fread() 、 fwrite() 、 fseek() 、 fclose()

3.fread算法:
第一次调用fread()时候,FILE结构体的缓冲区时空的,fread()使用保存的文件描述符fd发出一个n = read(fd, fbuffer, BLKSIZE);

4.fwirite算法:
与fread类似,只是数据传输方向不同。

5.fclose算法:
若文件以写的方式被打开,fclose会先关闭文件流的局部缓冲区。然后,它会发出一个close(fd)系统用来关闭FILE结构体中的文件描述符。
最后,它会释放FILE结构体,并将FILE指针重置为NULL。

6.fopen()
fopen()中的模式参数可以指定为"r"、"w"、"a",分别代表读、写、追加。
每个模式字符串可以包含一个"+"号,表示同时读写,或者在写入、追加情况下,如果文件不存在则创建文件。

练习9.3##

编写一个c程序,计算文本文件的行数。

相关的代码:

#include <stdio.h>

int main() {
    FILE *file;
    char ch;
    int line_count = 0;

    // 打开文本文件
    file = fopen("file.txt", "r");

    // 检查文件是否成功打开
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    // 逐个字符读取文件内容,统计行数
    while ((ch = fgetc(file)) != EOF) {
        if (ch == '\n') {
            line_count++;
        }
    }

    // 关闭文件
    fclose(file);

    // 打印行数
    printf("文件的行数为:%d\n", line_count);

    return 0;
}

创建的文本:

运行结果:

苏格拉底挑战

  1. 知识点1:I/O库函数与系统调用

    我在学习I/O库函数与系统调用知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。

 - 针对我XXX知识点,我理解了吗?

 - 我的回答结束了,请对我的回答进行评价总结。

  1. 知识点2:变参函数

    我在学习变参函数知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。

 - 针对我变参函数知识点,我理解了吗?

 - 我的回答结束了,请对我的回答进行评价总结。

问题与解决思路

在学习过程中,我遇到了以下问题,并使用chatgpt等AI工具解决:

  1. 问题1:我忘记了Linux环境下如何编译c文件,方便快捷的询问gpt

  2. 问题2:一下没想到为什么有任何的fopen()调用失败程序将会终止


    了解知道这是为程序健壮性做的考虑。

posted on 2023-09-17 21:59  逸致  阅读(2)  评论(0编辑  收藏  举报