第二周学习

学习笔记2
I/O函数
I/O函数与系统调用
fread算法
fwrite算法
fclose算法
格式化I/O
文件缓冲流
变参函数
类PRINTF函数
I/O函数
I/O函数与系统调用
基础知识
open():打开文件
read():从文件或设备读取数据
write():向文件或设备写入数据
close():关闭文件n
fork():创建一个新进程
exec():执行一个新程序
wait():等待子进程结束
exit():终止当前进程pipe():创建一个管道
dup():复制文件描述符
pipe2():创建一个双向管道
kill():向进程发送信号
brk():改变进程的堆的大小
mmap():映射文件或设备到内存
munmap():取消内存映射
socket():创建一个套接字
bind():将套接字绑定到地址
listen():监听传入连接请求
accept():接受传入的连接
connect():建立与远程主机的连接

fread算法
fread() 是 C 语言标准 IO 库中常用的一个文件读函数。

fread() 的主要功能是从文件流中读取多个数据块:

语法:

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

参数:

void *ptr: 指向要保存读取数据的内存块指针
size_t size: 每个读入元素的大小,以字节为单位
size_t nmemb: 要读取的元素个数
FILE *stream: 文件流指针
返回值:

成功读取的元素个数

工作原理:

fread() 从 stream 文件流读取 size * nmemb 字节的数据到内存块 ptr 中
一次读取 size * nmemb 个元素,每个元素大小为 size 字节
返回实际成功读取的元素个数

fwrite算法
fwrite() 是 C 语言标准 IO 库中常用的文件写函数,它用于向文件或输入/输出流写数据。

fwrite() 的函数原型和参数如下:

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

参数说明:

const void *ptr: 指向要写入数据缓存区的指针
size_t size: 每个元素的大小,以字节为单位
size_t nmemb: 要写出元素的个数
FILE *stream: 文件指针
返回值:

成功写入的元素的个数

fwrite() 的工作过程:

从指针 ptr 指向的缓存区读取 size * nmemb 个字节的数据
将这些数据写入到由文件指针 stream 指定的文件或输出流中
返回实际成功写入的元素个数

fclose算法
fclose() 函数是 C 标准库中的一个重要文件操作函数。它用于关闭一个已经打开的文件。

fclose() 的主要功能和使用方法如下:

​ signature:

int fclose(FILE *stream);

参数:

FILE *stream: 要关闭的 opened 文件指针。
工作原理:

fclose() 关闭由文件指针 stream 指定的文件。
刷新该文件内部缓冲区中的数据到磁盘文件中。
释放该文件内存及系统资源。
返回值:

成功时返回 0,失败返回 EOF。

格式化I/O
格式化I/O是C语言中重要的I/O功能之一。它允许程序以一致和整洁的格式来读取或输出数据。

格式化I/O主要通过printf和scanf系列函数实现。

printf函数负责格式化输出,scanf负责格式化输入。它们都使用格式字符串来控制I/O的格式。

格式字符串包含格式说明符和其他控制符,格式说明符决定输出/输入数据的格式,如%d指定十进制整数,%s字符串等链接:
格式化I/O的主要优点:

整洁有格式,可读性强
利用说明符轻松处理不同数据类型
可以包含其他控制格式的字符如\n换行符
便于国际化,可以根据地点自动适应数制和字号等格式
其他格式化I/O函数包括fprintf、fscanf用于文件I/O;sprintf、sscanf用于内存I/O等。

格式化I/O通过字符串控制格式,实现类型安全和一致整洁的I/O,在C程序中广泛应用。

文件缓冲流
每次对磁盘文件的直接读写操作都需要开销较大的系统调用,这对程序性能有影响。为解决这个问题,C标准库引入了文件缓冲流的概念。

文件缓冲流的工作方式:

每次打开一个文件时,会关联一个FILE结构体对象。
FILE对象中包含文件描述符和缓冲区。
程序通过FILE对象进行文件I/O操作,如fread(),但数据 zunächst不直接写磁盘,而是缓存在缓冲区中。
当缓冲区满时,会自动Flush到磁盘文件;也可以手动调用fflush()强制Flush。
这样就实现了:

每次I/O不必直接调用系统调用,效率更高。
批量I/O可以减少系统调用次数。
主要文件缓冲流函数:

fopen() - 打开文件返回FILE*
fread()/fwrite() - 缓冲I/O
fclose() - 关闭文件,同时Flush缓冲区
setbuf()/setvbuf() - 设置缓冲区
fflush() - 刷新缓冲区
文件缓冲流是C语言I/O优化的关键,它提高了文件I/O效率。

全缓冲(fully buffered)
使用较大的固定大小缓冲区,通常8KB或者更大。
只在缓冲区满时或fclose()时写入磁盘。
行缓冲(line buffered)
对stdin和stdout默认采用行缓冲方式。
每输出一个换行符或者fclose()时写入磁盘。
无缓冲(unbuffered)
每次读写直接在磁盘上进行,缓冲区大小为0。

变参函数
变参函数(Variadic Function)是C语言支持的一种函数,它允许函数接收不确定数量和类型的参数。

变参函数的主要特征:

函数原型中用省略号…表示参数列表的最后一个参数可变。

变参参数在调用时通过可变数量的参数传入。

变参在函数内通过va_list类型的va_start、va_arg、va_end宏操作参数。

典型的变参函数有printf()和scanf()

类PRINTF函数
类printf函数是指功能类似printf的格式化输出函数,例如sprintf、fprintf等。

主要功能和特点:

和printf一样支持格式化字符串输出,可以很方便地输出不同类型的数据

除了向标准输出输出,还可以指定不同的目标,如文件、内存buffer等

常见类printf函数:

sprintf:将格式化字符串输出到字符串buffer中

fprintf:将格式化字符串输出到文件流中

snprintf:类似sprintf但限制最大输出字节数,防止buffer溢出

优点:

格式化输出更简单易用

可以自定义输出目的地,更灵活

缺点:

不像printf直接输出,需要额外处理输出 buffer或文件

类型不安全,需要匹配格式符和实参类型

基本数据类型:

整数型: %d、%i、%u、%x等

浮点型:%f、%e、%g等

字符串:%s

字符:%c

指针:%p

相比printf,类printf函数支持指定输出目的地,但略显复杂,使用时需要注意格式符类型与参数匹配。它们非常适用于需要格式化输出到文件/内存而不是标准输出的场景
————————————————
版权声明:本文为CSDN博主「赤673」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_66603226/article/details/132824684
posted @ 2023-09-12 10:32  李浩瑞  阅读(40)  评论(0)    收藏  举报