Linux教材第九章学习笔记——I/O库函数

发布时间 2023-09-17 16:08:08作者: 20211115fyq

C语言文件操作内容复习

 cd ..   返回上级目标文件:

 

./    执行文件:

对文件内容进行修改,在vim命令行输入wq保存后返回:

 gcc编译后输入./a.out可显示出c文件运行结果:

 编译预处理:

 编译:

 汇编:

 用字符方式逐个打印hello.c;打印十六进制文件:

 

I/O库函数知识点总结

1.基本概念

库函数:就是一系列函数的集合,供编程时进行系统调用,既方便用户使用,又提高了工作效率。

I/O库函数建立在系统调用的基础上。

*系统调用函数:open(),read(),write(),lseek(),close;

*I/O库函数:fopen(),fread,fwrite(),fseek,fclose.

2.I/O库函数算法

(1)fread():在第一次调用fread()时,FILE结构体的缓冲区是空的,fread()使用保存的文件描述符fd发出一个n = read(fd, fbuffer, BLKSIZE);在随后的每次fread()调用中,它都尝试满足来自FILE结构体内部缓冲区的调用。函数模型为:

(2)fwrite():与fread相似,只是数据传输方式不同。

(3)fclose():若文件以写的方式被打开,fclose()会先关闭文件流的局部缓冲区。然后,它会发出一个close(fd)系统调用来关闭FILE结构体中的文件描述符。

 

(4)fseek():

 3.I/O库模式

fopen()中的模式参数可以指定为:“r”、“w”、“a”,分别代表读、写、追加。

每个模式字符串可包含一个+号,表示同时读写,或者在写入、追加情况下,如果文件不存在则创建文件。

“r+”:表示读/写,不会截断文件。

“w+”:表示读/写,但是会截断文件;如果文件不存在,会创建文件。

“a+”:表示通过追加进行读/写;如果文件不存在,会创建文件。

(1)字符模式I/O

int fgetc(FILE *fp):       //从fp中获取一个字符转换为整型。

int ungetc(int  c,  FILE  *fp);      //将先前由fgete()获得的字符压回流。

int fputc()(int  c,  FILE  *fp);      //将字符放入fp。

注意!:fget()返回的是整数而不是字符。这是因为它必须在文件结束时返回文件结束符。文件结束符通常是整数-1,将它与文件流中的任何字符区分开;

(2)行模式I/O

char *fgets(char  *buf,  int  size,  FILE  *fp):从fp中读取最多为一行(以\n为结尾)的字符。

int  fputs(char  *buf,  FILE  *fp):将buf中的一行写入fp中。

(3)格式化I/O

①格式化输入:(FMT=格式字符串)

scanf(char  *FMT,  &items);   //从stdin

fscanf(fp,  char  *FMT,  &items);    //从文件流

②格式化输出:

printf(char  *FMT,  items);    //到stdout

fprintf(fp,  char  *FMT,  items);    //到文件流

(4)内存中的转换函数

sscanf(buf,  FMT,  &items);    //从内存中的buf输入

sprintf(buf,  FMT,  items);    //打印到内存中的buf[  ]

4.文件流缓冲

文件流可以使用三种缓冲方案中的一种:

无缓冲:从非缓冲流中写入或读取的字符将尽快单独传输到文件或从文件中传输。

行缓冲:遇到换行符时,写入行缓冲流的字符以块的形式传输。

全缓冲:写入全缓冲流或从中读取的字符以块的形式传输。

 

向ChatGpt请求苏格拉底挑战

学习感悟

对于流,缓冲区等概念的理解还不透彻,对二进制文件的操作还不熟练,需进一步学习并实践。