C语言标准IO

一、标准 I/O 的概念

标准 I/O 由 Dennis Ritchie 于 1975 年创建,是 C 语言的标准库之一,符合 ANSI C 规范。在输入方面,键盘是默认的标准输入设备(/dev/input);在输出方面,显示器是默认的标准输出设备。在 Linux 操作系统中,I/O 操作本质上都是对文件的操作。标准 I/O 对普通文件的操作通常带有缓存,在文件 I/O 和用户程序之间加入缓冲区,能够有效减少系统调用的次数,提高效率,节省系统 I/O 调度资源。

二、文件相关

在 Linux 中,一切皆为文件,文件用于存储数据(包括数据和指令)。Linux 中的文件类型有 7 种,分别为:d(目录)、-(普通文件)、l(符号链接)、p(管道)、s(套接字)、c(字符设备文件)、b(块设备文件)。

三、标准 I/O 的分类与相关函数

标准 I/O 是 ANSI C 设计的一组用文件 I/O 封装的操作库函数,其头文件为stdio.h,位于/usr/include/stdio.h。使用<>包含头文件表示系统库函数,默认路径在/usr/include/;使用""包含头文件表示用户自定义函数,默认是当前路径。

常见的标准 I/O 函数众多,如printfscanfsprintfgetcharputchargetsputsgetcputcfgetsfputsfreadfwriteftellrewindfseek等。

四、文件操作步骤与缓冲区

文件操作一般包括打开文件、进行读写操作以及关闭文件。缓冲区分为行缓冲(1K,主要用于人机交互,如stdout,在遇到\n、缓冲区满、程序结束或使用fflush时刷新)、全缓冲(4K,主要用于文件读写,在缓冲区满、程序结束或使用fflush时刷新)和无缓冲(0K,主要用于出错处理信息输出,如stderr,不对数据缓存直接刷新)。

五、文件打开与读写操作

打开文件使用fopen函数,其根据不同的模式(如只读r、读写r+、只写w、写读w+、追加可写a、追加读写a+)进行操作,并返回相应的文件流指针。读写操作相关的函数丰富多样,如fgetc/fputc处理单个字符,fgets/fputs处理一行数据,fread/fwrite可自定义读写数据的大小。

六、函数的具体介绍

1.fputc函数 向流中写入一个字符,成功返回写入的字符 ASCII 码值,失败返回EOF

2.fgetc函数 从流中读取一个字符,成功返回读到字符的 ASCII 码值,读到文件末尾返回EOF

可以通过EOF宏或feof()函数来判断fgetc函数是否到达文件结尾。

3.fgets/fputs函数 按行获取数据。fgets函数从指定流中获取指定大小的文本数据并存入本地内存,fputs函数则将本地内存中的数据写入指定流。getsfgets存在一些区别,如gets的安全性问题以及对\n字符的处理方式等。

4.freadfwrite函数用于二进制文件的读写。

对于fread函数:

  • size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream),从指定的stream流对象中获取指定个数和大小的数据块到本地内存。

对于fwrite函数:

  • size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream),从本地内存取出指定个数和大小的数据块写入到指定的文件流对象中。
相关推荐
uyeonashi1 小时前
【Boost搜索引擎】构建Boost站内搜索引擎实践
开发语言·c++·搜索引擎
再睡一夏就好1 小时前
从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
linux·服务器·c语言·开发语言·学习笔记
TIF星空2 小时前
【使用 C# 获取 USB 设备信息及进行通信】
开发语言·经验分享·笔记·学习·microsoft·c#
Smile丶凉轩4 小时前
Qt 界面优化(绘图)
开发语言·数据库·c++·qt
reasonsummer4 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
C_Liu_5 小时前
C语言:深入理解指针(5)
java·c语言·算法
small_wh1te_coder5 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
苏三福6 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
qqxhb7 小时前
零基础学Java——第十一章:实战项目 - 桌面应用开发(JavaFX入门)
java·开发语言·javafx
大神薯条老师7 小时前
Python零基础入门到高手8.4节: 元组与列表的区别
开发语言·爬虫·python·深度学习·机器学习·数据分析