Linux文件IO函数与标准IO库函数

Linux——文件IO操作 本篇文章主要是讲解在Linux环境下文件IO操作,包含文件IO中的基本概念以及一些常用的函数接口调用,希望可以给读者带来技术上的帮助!本文讲解了三种类型IO操作以及库,三种类型分别是标准IO、文件IO以及目录,三者既有不同点又有相同点。 阅读详情

Linux中,文件有为操作系统和设备提供了一个简单而统一的接口。在Linux中,几乎一切都可以看做文件 。
Linux对文件的操作有两种方式文件IO函数(系统调用)和标准IO库函数调用。系统调用是最直接的方式,库函数调用最终也是通过系统调用实现的。可认为库函数调用是对系统调出于效率考虑而做出的优化。
二者区别:
系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。
库函数调用是系统无关的,因此可移植性好。标准的IO库函数对文件的操作最终是通过系统调用实现的,但标准io函数库采用缓存技术,减少系统调用的次数。
系统调用通常用于底层文件访问(low-level file access),例如在驱动程序中对设备文件的直接访问。
库函数调用通常用于应用程序中对一般文件的访问。
一、文件IO函数–系统调用
基本函数:

#include<unistd.h>
int open(const char *path, int flags);
-->打开或创建一个文件
int open(const char *path, int flags, mode_t mode );
-->当用于创建文件时需要用第二个函数指明文件的相关权限信息
size_t write(int fd, const void *buf, size_t nbytes);
-->
size_t read(int fd, void *buf, size_t nbytes);
int close(int fd);
off_t lseek(int filedes, off_t offset, int whence);
-->设置读写文件的当前位置
whence有三个参数SEEK_SET/SEEK_CUR/SEEK_END(文件开始/当前/结束位置),则文件的偏移量为设置的whence参数加上offset

二、标准IO库函数

    在基于文件描述符中的底层系统调用的I/O操作中,所有的I/O函数都是针对文件描述符的。当打开一个文件时,即返回一个文件描述符,然后该问价描述符就用于后续的I/O操作。
    在标准I/O库中,所有的I/O操作都是围绕流(stream)来进行的。在Linux中,文件和设备都可以看做是数据流。 
    Linux对一个进程预定义了三个流:标准输入流,标准输出流和标准错误输出流,它们自动地为进程打开并可用。这三个标准I/O流通过在头文件<stdio.h>中预定义的文件指针stdin,stdout和stderr加以引用。它们与文件描述符STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO所表示的标准输入,标准输出和标准错误输出相对应。
     标准I/O库提供了函数fopen用于打开一个流。当打开一个流时,该函数会返回一个指向FILE对象的指针,即文件指针(类型为FILE *)。FILE对象通常是一个结构,它包含了I/O库为管理该流所需要的所有信息:用于实际I/O的文件描述符,指向流缓存的指针,缓存长度,当前在缓存中的字节数,出错标志等。但一般应用程序没有必要关心FILE结构体的各成员值,使用流时,只需要将FILE指针作为参数传递给每个标准I/O函数。 

基本函数:

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);-->使一个标准的I/O流与该描述相结合。
FILE *freopen(const char *path, const char *mode, FILE *stream);
-->在指定的流上打开一个指定的文件,此函数一般用于将一个指定的文件打开为预定义的流(如标准输出)。
int flose(FILE *fp);-->关闭流

读写流:
(1)每次一个字符的IO

int getc(FILE *fp);
int fgetc(FILE *fp);
int getchar(void);
/* 上面三个函数的返回值为int,因为EOF常实现为-1,返回int就能与之比较 */

/* 判断出错或者结束 */
int ferror(FILE *fp);
int feof(FILE *fp);
void clearerr(FILE *fp); /* 清除error或者eof标志 */

/* 把字符压送回流 */
int ungetc(intc FILE *fp);

/* 输出 */
int putc(int c, FILE *fp);
int fputc(int c, FILE *fp);
int putchar(int c);

(2)每次一行的IO。

#include <stdio.h>
/* 输入 */
char *fgets(char *restrict buf, int n, FILE *restrict fp);
char *gets(char *buf);
/* gets由于没有指定缓冲区,所以有可能造成缓冲区溢出,要小心 */

/* 输出 */
int fputs(char *restrict buf, FILE *restrict fp);
int puts(const char *buf);

(3)直接IO

#include <stdio.h>
size_t fread(void *restrict ptr, size_t size, size_t nobj,
            FILE *restrict fp);
size_t fwrite(const void *restrict ptr, size_t size, size_t nobj,
            FILE *restrict fp);
/* 返回值:读或写的对象数 */

定位流

long ftell(FILE *fp);
/* 成功则返回当前文件位置指示,出错返回-1L */

int fseek(FILE *fp, long offset, int whence);
/* 成功返回0, 出错返回非0 */

int fgetpos(FILE *restrict fp, fpos_t *restrict pos);
int fsetpos(FILE *fp, fpos_t *pos);
/* 成功返回0,出错返回非0 */

格式化IO

执行格式化输出的主要是4个 printf 函数:
    printf  输出到标准输出
    fprintf  输出到指定流
    sprintf  输出到指定数组
    snprintf  输出到指定数组并在数组的尾端自动添加一个null字节
格式化输入主要是三个 scanf 函数:
    scanf  从标准输入获取
    fscanf  从指定流获取
    sscanf  从指定数组获取
ESP32-CAM图传小车:端边协同的嵌入式视觉系统设计 在物联网边缘智能场景中,嵌入式视觉系统需平衡实时性、算力与成本。其核心在于理解图像采集、硬件编码、低延迟传输与分层计算的基本原理——OV2640等CMOS传感器配合JPEG硬件编码可显著降低主控负载;TCP流式协议比HTTP/RTSP更适配资源受限MCU;而‘计算卸载’架构将OpenCV等重负载移至Android端,使ESP32专注实时控制与传输,既发挥FreeRTOS任务调度优势,又规避了PSRAM带宽与内存瓶颈。该模式广泛适用于教育机器人、智能巡检及DIY视觉终端等场景,本文以WiFi图传坦克小车为载体 阅读详情

相关推荐

告别手动拖拽!PyQt5/PyQt6 QTableView列宽自适应窗口的三种实战方案(附性能对比)

本文详细介绍了PyQt5/PyQt6中QTableView列宽自适应窗口的三种实战方案,包括Stretch模式、resizeEvent手动计算和ResizeToContents模式,并附有性能对比。帮助开发者解决窗口大小变化时列宽不变的常见问题,提升用户体验和开发效率。

weixin_42538752的博客 227

linux详解---2.文件IO(本文具体详解,适合0基础直接学习,全CSDN最详细基础文件IO函数)

dawdaw dwadw dwadaw

m0_62731496的博客 2539

DeepSeek赋能公文写作:从高效成文到精准传情的全维度指南

摘要:AI赋能公文写作的精准化实践 公文写作长期面临框架混乱、素材匮乏、表达不规范、修改低效等痛点。DeepSeek等AI工具通过"精准指令+分步赋能"模式实现突破:首先明确公文的目的性、逻辑性和规范性特征;其次采用包含场景、类型、目的等要素的指令模板;再分四步实施:框架搭建确保层次分明,内容填充解决素材问题,表达优化适配不同语体,合规校验把关格式规范。典型案例显示,AI能将数据罗列转化为"数据+成果+价值"的生动表述,使公文既规范又具感染力。这种AI赋能的写作方法显

通俗易懂学IT 222

Linux学习——文件IO

Linux学习笔记

qq_52479948的博客 4501

【零基础入门unity游戏开发——unity通用篇14】unity特性相关的知识(基于unity6开发介绍)

unity特性相关的知识(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1195

【26美赛A题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文介绍了2026年美赛数学建模A题的解题思路与方法。A题通常属于连续型系统问题,重点在于构建可解释的机理模型,通过将现实机制转化为动态方程进行仿真预测。文章提出了通用建模路线,包括机理抽象、模型假设、动态建模、参数识别、系统仿真和情景预测六个阶段。专栏将提供从机理到方程的系统建模思路、参数标定方法、Python/Matlab实现代码以及高分论文模板。内容适合参加2026美赛A题、偏重物理/工程建模方向的参赛队伍,旨在提升机理建模能力。后续将更新完整题解和源码。

一键难忘的博客 1994

Linux文件I/O

本篇博客详细介绍了Linux文件I/O的基础知识和使用方法,并提供了相关的代码示例。希望这些内容能够对读者们在Linux操作系统上进行文件操作时有所帮助。

qq_45056668的博客 484

RT-DETR改进策略【卷积层】| CVPR2025 GBConv轻量门控瓶颈卷积 低秩瓶颈降参 + 门控聚焦形态,强效捕捉纤细目标

裂缝形态不规则、纹理纤细,传统卷积参数大、计算冗余,且无法动态聚焦裂缝形态;背景噪声强易干扰特征提取,需要轻量且能自适应聚焦裂缝形态的卷积单元,因此提出轻量门控瓶颈卷积 GBC。

Limiiiing的博客 135

Linux:文件IO

的核心思想是让进程在执行 I/O 操作时不必等待操作完成,从而可以并发执行其他任务。通常的同步 I/O 操作是阻塞式的,也就是当一个 I/O 请求发出后,进程会被挂起,直到请求完成。的主要功能是将文件或设备映射到进程的虚拟地址空间,从而能够像访问内存一样对文件进行读写操作。系统调用的重复数据拷贝,极大地提高了文件 I/O 的效率。,并赋予该文件的拥有者读写权限,这里的S_IRUSR。函数用于打开文件并返回文件描述符,它的原型如下。在 Linux 中,文件 I/O 的核心概念是。:表示文件所有者具有写权限。

2301_80094394的博客 1296

图像标注神器:完全开源免费的多功能标注工具Labelme详解

Labelme是MIT开发的免费开源图像标注工具,支持多边形、矩形等多种标注类型,适用于目标检测、分割等计算机视觉任务。提供Windows可执行文件和Python安装两种方式,可输出JSON格式并转换为COCO等标准数据集。具有跨平台、功能全面、社区活跃等优势,能显著提升标注效率,是AI视觉项目的重要数据准备工具。

数字人生 523

学Simulink——基于Simulink的单相PWM整流器PI电压外环+电流内环控制建模示例

本文详细介绍了基于Simulink的单相PWM整流器双闭环控制仿真方法。通过电压外环PI控制器调节有功功率生成电流指令,电流内环PI控制器实现正弦电流跟踪,最终达到输出电压稳定(400V±2V)、输入电流THD<3%、功率因数>0.99的目标。文章包含系统架构、数学模型、Simulink搭建步骤(主电路、PI控制器、SPWM调制等)及三种典型工况的仿真验证,并给出电感设计、数字实现等工程实践要点。该方案克服了传统整流器高谐波、低功率因数的问题,为绿色电源开发提供了可验证的仿真模型。

xiaoheshang_123的博客 71

Linux 编程基础1--文件IO和标准IO、系统调用与库函数

一、文件IO和标准IO 1、什么是文件I/O和标准I/O 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linux或unix平台。 标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性,标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I

weixin_38293850的博客 713

【AUTOSAR OS】调度表管理模块深度解析

本文深入解析AUTOSAR OS调度表的实现机制。调度表通过预定义到期点序列控制任务激活时序,支持周期性执行、多核协同和容错处理。核心数据结构包括调度表控制块(STCB)、配置结构和到期点动作。关键函数涵盖初始化、启动、到期点处理及链表管理,采用O(n)时间复杂度。以发动机控制为例展示配置与使用方式,并探讨显式同步、时间容错等高级特性。最后提出EP数量控制、链表优化等性能建议,为汽车ECU时间触发系统开发提供参考。

1602

基础IO -- Linux与标准库下的文件IO操作

前言 在进行Linux的学习过程中,我们会接触到一系列与IO操作相关的函数。一般而言,我们将其分为三类,分别是: 文件IO、标准IO和库函数。 其中,文件IO顾名思义便是对文件进行操作的函数,再加上在Linux系统中,一切皆文件,所以当我们在之后的时间内进行更加深入的学习之后,文件IO的操作函数将会使用的越来越多。所以,今天,我们首先从将从常见的文件IO函数开始进行学习。 标准库的文件IO接口 代码举例 首先来看下面一段代码,我们用fopen打开文件然后进行写操作,完毕之后fclose关闭文件。文件IO操作

ifwecande的博客 226

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

系统调用和库函数

1、系统调用的本质   所有操作的本质都是要下发命名到硬件,在Linux操作系统中提供了linux内核来驱动操作硬件、为了方便用户操作相关硬件功能,所以提供了一些函数接口,用于操作Linux内核,进而由内核来操作硬件。这些接口称之为系统调用。   在Linux内核中,大多数的代码也是系统调用。在应用层调的一些函数接口,有些也是在函数接口内在调用内核中的系统调用函数。 文件io:称之为系统调用 标准io:称之为库函数 2、库函数   库函数的本质是系统调用,系统调用函数只要执行一次,就需要对Linux内核访

ZBraveHeart的博客 3997

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux操作系统——文件编程(C库函数 - 标准IO)| 缓冲机制

功能: 从指定的文件中stream中读取nmemb个元素,每个元素size大小的这么多数据,存放 到指定ptr文件中。函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);对于二进制文件存在大量的'\0',fgets读取文件没有问题,但是fputs输出字符串,遇到'\0'就结束输出。返回值: 成功 返回文件指针(FILE *指针 ---> 文件指针/流指针)

2301_81517435的博客 731

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

linux系统-- 文件编程(C库函数-标准IO)

C 语言文件操作遵循 "打开→读写→关闭" 的基本流程,核心依赖标准库。流打开函数 ,打开 pathname指定的文件,并 关联一个流。不适合二进制文件(如图片、视频),因为二进制文件中可能包含。适合处理二进制文件或固定结构的数据(如结构体),不依赖。实现内存与外部存储(如硬盘文件)的数据交互。:流指针 ,关联到这个流上 ,代表这个流。:内存与外部文件之间的 "数据通道",的作用是创建该通道并关联到指定文件。:检查是否到达文件结尾。打印错误信息(需包含。:检查流是否发生错误。

2401_83533039的博客 760

Linux文件操作总结(系统调用和标准IO库函数)

一、用于访问设备驱动程序的底层函数

Plain的专栏 2568

Linux 之 Linux应用编程概念、文件IO、标准IO

它是一个库函数,在内部会处理很多复杂的操作,如缓冲区管理、格式化输出等,这些操作可能会基于底层的系统调用(如写入到标准输出文件描述符的系统调用),但从应用程序开发者的角度来看,使用cout比直接使用系统调用更加方便、直观。例如,C 标准库中的stdio.h库中的fopen函数,它在内部可能会调用系统调用open来实现文件的打开操作,但fopen提供了更易用的接口,如可以直接使用字符串形式的文件名(不需要像open那样进行一些底层的参数设置),并且可以自动处理一些错误情况。但其底层仍然使用系统调用IO函数。

挥剑决浮云的博客 928

标准IO库函数

标准IO和文件IO有什么区别 使用时都是函数形式,但是:标准IO是C库函数,而文件IO是Linux系统的API。 C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API更加好用一些。 库函数比API还有一个优势是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。C库函数具有可移植性,而API不具有可移...

qq_41719582的博客 470

linux不同文件函数调用,Linux文件操作总结(系统调用和标准IO库函数)

一、系统调用❑ open: Open a file or device❑ read: Read from an open file or device❑ write: Write to a file or device❑ close: Close the file or device❑ ioctl: Pass control information to a device driver函数原型:#...

weixin_42139871的博客 314

28、Linux文件IO与标准IO详解:从概念到实战

本文详细介绍了Linux系统中文件IO与标准IO的核心概念及实战应用。文件IO是操作系统提供的底层系统调用(如open/read/write),直接操作文件描述符,无缓存;标准IO是C库封装的高级接口(如fopen/fread/fwrite),通过文件流指针操作并自带用户态缓存,具有更好的跨平台性。文章通过多个代码示例展示了文件IO的基本操作,包括文件创建、读写、拷贝以及lseek调整偏移量等实用技巧,并对比了两者的适用场景和性能特点,为开发者提供了全面的文件操作指导。

weixin_46607526的博客 972

标准IO库介绍

1、标准IO和文件IO有什么区别(1)看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是linux系统的API(2)C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API要更加好用一些。(3)库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。所以C库函数具有可移植...

休憩小站 1816

IO相关,标准输入输出及错误提示

操作系统的概念:向下统筹控制硬件,向上为用户提供接口。操作系统的组成 = 内核 + 外壳(shell)linux的五大功能:进程管理、内存管理、文件管理、设备管理、网络管理。最早接触的IO:printf -- 标准输出scanf -- 标准输入。

2303_78438820的博客 868

Linux软件编程:IO(二进制文件)、文件IO

2.文件描述符((标准IO中为文件流)特点:非负整数、取尚未被占用的最小非负整数、文件描述符是有上限的,到达上限后打开会报错误。3.文件打开:与标准IO对应的有三个特殊的文件描述符,标准输入(0)、标准输出(1)、标准错误(2)2.库函数:是系统调用的封装,可以在不同的操作系统中安装并使用,最终还要调用系统函数完成对应功能。1.标准IO是有缓存的IO,文件IO没有缓存,适合于通信、硬件设备操作。2.标准IO是库函数,文件IO是系统调用。5.标准IO对应的文件IO的打开方式。(三)文件IO函数接口。

2501_91498265的博客 250

Linux 标准IO库介绍

1、标准IO和文件IO有什么区别? (1)、看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是Linux系统的API。 (2)、C语言库函数是由API封装而来的。库函数内部也是通过调用API来完成操作的,但是库函数因为多了一层封装,所以比API要更加好用一些。 (3)、库函数比API还有一个优势就是:API在不同的操作系统之间是不能通用的,但是C库函数在不同操作系统中几乎是一样的。...

weixin_30378311的博客 243
上一篇: 0/1背包问题的动态规划分析
下一篇: 函数指针的使用,以及使用函数指针的好处
Gouhailiang
博客等级 码龄10年 8粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值