学习笔记: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:I/O库函数与系统调用
我在学习I/O库函数与系统调用知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。
- 针对我XXX知识点,我理解了吗?
- 我的回答结束了,请对我的回答进行评价总结。
-
知识点2:变参函数
我在学习变参函数知识点,请你以苏格拉底的方式对我进行提问,一次一个问题。
- 针对我变参函数知识点,我理解了吗?
- 我的回答结束了,请对我的回答进行评价总结。
问题与解决思路
在学习过程中,我遇到了以下问题,并使用chatgpt等AI工具解决:
-
问题1:我忘记了Linux环境下如何编译c文件,方便快捷的询问gpt
-
问题2:一下没想到为什么有任何的fopen()调用失败程序将会终止
了解知道这是为程序健壮性做的考虑。