第二周学习
学习笔记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
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
浙公网安备 33010602011771号