当前位置: 首页 > news >正文

Linux | 标准IO编程

Linux | 标准IO编程


时间2024年6月8日23:03:43

文章目录

  • `Linux` | 标准`IO`编程
    • 1.标准`IO`编程
      • 1-1.流的打开
        • 函数fopen()
      • 1-2.流的关闭
        • 函数fclose()
      • 1-3.错误处理
        • 函数perror()
        • 函数strerror()
          • errno 变量
          • 总结
      • 1-4.流的读写
        • 1-4-1.按字符(字节)输入/输出
          • 实例
        • 1-4-2.按行输入/输出
        • 1-4-3.以指定大小为单位读写文件
      • 1-5.流的定位
        • fseek()函数
        • 示例 1:将文件指针定位到文件末尾
        • 示例 2:将文件指针从当前位置向后移动 100 个字节
        • ftell()函数
        • 示例 1:读取文件并输出当前位置
        • 示例 2:只获取文件大小(不是标准方法,但可以用作简单示例)
      • 1-6.格式化输入输出
        • 格式化输入函数
        • 格式化输出函数

1.标准IO编程

1-1.流的打开

函数fopen()

fopen 是 C 语言中用于打开文件的标准库函数。它属于 <stdio.h> 头文件,并用于创建或打开一个文件,以便进行后续的文件读写操作。

函数的原型通常如下:

FILE *fopen(const char *filename, const char *mode);

参数说明:

  • filename:要打开或创建的文件的名称(包括路径,如果需要的话)。

  • mode:一个字符串,指定了文件的打开模式。这些模式可以是以下值之一或它们的组合(注意,并非所有组合都是有效的):

    • "r":以只读方式打开文件。文件必须存在。
    • "w":以写入方式打开文件。如果文件不存在,则创建它;如果文件存在,则其内容被截断为零长度。
    • "a":以追加模式打开文件。如果文件不存在,则创建它;如果文件存在,则写入的数据会被追加到文件的末尾。
    • "r+":以读写方式打开文件。文件必须存在。
    • "w+":以读写方式打开文件。如果文件不存在,则创建它;如果文件存在,则其内容被截断为零长度。
    • "a+":以读写方式打开文件用于追加。如果文件不存在,则创建它;如果文件存在,则写入的数据会被追加到文件的末尾。
    • "b":二进制模式(可以与上述模式组合使用,如 "rb""wb+")。在 Windows 系统上,当以文本模式打开文件时,\n 会被转换为 \r\n,而在读取时,\r\n 会被转换为 \n。在二进制模式下,这种转换不会发生。

返回值:

  • 如果文件成功打开,fopen 返回一个指向 FILE 对象的指针,该对象可用于后续的文件操作。
  • 如果文件打开失败,fopen 返回 NULL

示例:

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file == NULL) {printf("Failed to open file\n");return 1;}fprintf(file, "Hello, World!\n");fclose(file);return 0;
}

在这个示例中,我们试图以写入模式(“w”)打开一个名为 “example.txt” 的文件。如果文件打开成功,我们向其中写入 “Hello, World!\n”,然后关闭文件。如果文件打开失败,我们打印一条错误消息并返回 1。

1-2.流的关闭

函数fclose()

fclose 是 C 语言中用于关闭一个已打开的文件的标准库函数。当你使用 fopen 或其他相关函数打开一个文件后,在完成对该文件的读写操作后,应该使用 fclose 函数来关闭它。关闭文件是一个重要的步骤,因为它会释放与文件关联的所有资源,并确保所有的数据都被正确地写入到磁盘中。

函数的原型如下:

int fclose(FILE *stream);

参数说明:

  • stream:一个指向 FILE 对象的指针,该对象是由 fopen 或其他相关函数返回的。

返回值:

  • 如果文件成功关闭,fclose 返回零(0)。
  • 如果发生错误,fclose 返回非零值(通常是 EOF,它在 <stdio.h> 中定义,通常是一个负数)。

示例:

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file == NULL) {printf("Failed to open file\n");return 1;}fprintf(file, "Hello, World!\n");// 关闭文件if (fclose(file) != 0) {printf("Failed to close file\n");return 1;}return 0;
}

在这个示例中,我们在写入 “Hello, World!\n” 到文件后,使用 fclose 函数来关闭文件。如果关闭文件时发生错误,我们打印一条错误消息并返回 1。然而,在大多数情况下,关闭文件通常不会失败,除非发生了磁盘错误或其他严重的系统问题。

请注意,在尝试读取或写入一个已关闭的文件时,程序的行为是未定义的,并且可能会导致程序崩溃或数据损坏。因此,确保在文件不再需要时关闭它是非常重要的。

1-3.错误处理

函数perror()

perror 是 C 语言标准库中的一个函数,它主要用于处理系统调用或库函数调用失败时产生的错误。以下是关于 perror 函数的详细解释:

函数原型perror

void perror(const char *s);

参数

  • s:这是一个指向字符串的指针,用于在错误信息前添加自定义的描述信息。如果 sNULL 或空字符串,则只输出错误描述。

功能

  • perror 函数将最近的系统错误代码(存储在全局变量 errno 中)转换为人类可读的错误描述,并将这个描述输出到标准错误流(stderr)。
  • 如果提供了自定义的字符串 s,则这个字符串会被输出在错误信息之前,并后跟一个冒号和空格。

返回值

  • perror 函数没有返回值(即返回类型为 void)。

使用示例

#include <stdio.h>
#include <stdlib.h>int main() {FILE *fp = fopen("nonexistent_file.txt", "r");if (fp == NULL) {perror("File opening failed"

相关文章:

Linux | 标准IO编程

Linux | 标准IO编程 时间:2024年6月8日23:03:43 文章目录 `Linux` | 标准`IO`编程1.标准`IO`编程1-1.流的打开函数fopen()1-2.流的关闭函数fclose()1-3.错误处理函数perror()函数strerror()errno 变量总结1-4.流的读写1-4-1.按字符(字节)输入/输出实例1-4-2.按行输入/输出1-…...

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 &#xff08;一&#xff09;-XX:PrintCommandLineFlags &#xff08;二&#xff09;-XX:PrintFlagsFinal 二、堆空间的配置 &#xff08;一&#xff09;默认配置 &#xff08;二&#xff09;配置Elasticsearch堆内存时&#xff0c;将初始大小设置为…...

milvus的GPU索引

前言 milvus支持多种GPU索引类型&#xff0c;它能加速查询的性能和效率&#xff0c;特别是在高吞吐量&#xff0c;低延迟和高召回率的场景。本文我们将介绍milvus支持的各种GPU索引类型以及它们适用的场景、性能特点。 下图展示了milvus的几种索引的查询性能对比&#xff0c;…...

CleanMyMac2024最新免费电脑Mac系统优化工具

大家好&#xff0c;我是你们的好朋友——软件评测专家&#xff0c;同时也是一名技术博主。今天我要给大家种草一个超级实用的Mac优化工具——CleanMyMac&#xff01; 作为一个长期使用macOS的用户&#xff0c;我深知系统运行时间长了&#xff0c;缓存文件、日志、临时文件等都会…...

catia/delmia的快捷图标模式最多12个

这儿最多显示12个 根据官方文档 If you installed a configuration containing more than 12 workbenches (such as the "AL2" configuration), only the first 12 workbenches are displayed in the Favorites list. The other workbenches do not appear in the l…...

磁盘性能概述与磁盘调度算法

目录 1. 磁盘性能概述 1. 数据传输速率 2. 寻道时间 3. 旋转延迟 4. 平均访问时间 2. 早期的磁盘调度算法 1. FIFO&#xff08;First-In-First-Out&#xff09;调度算法 2. SSTF&#xff08;Shortest Seek Time First&#xff09;调度算法 3. SCAN&#xff08;Elevator…...

chrome浏览器设置--disable-web-security解决跨域

在开发人员于后台进行接口测试的时候&#xff0c;老是遇到跨域问题&#xff0c;这时前端总是会让后台添加跨域请求头来允许跨域请求&#xff0c;今天介绍一个简单的方法跨过这一步操作的设置。 –disable-web-security参数&#xff0c;禁用同源策略&#xff0c;利于开发人员本…...

Android中蓝牙设备的状态值管理

在Android中&#xff0c;蓝牙状态可以通过多种方式来描述&#xff0c;主要包括蓝牙适配器状态、蓝牙设备连接状态以及蓝牙广播状态&#xff0c;其关键的蓝牙状态实现类有BluetoothAdapter、BluetoothDevicePairer、BluetoothDevice、BluetoothProfile&#xff0c;详细介绍如下&…...

关于ReactV18的页面跳转传参和接收

一、使用路由方式进行传参和接收&#xff08;此处需使用 useNavigate 和 useParams 两个hooks&#xff09; 1 首先需要配置好路由形式如下 :id(参数) { path: "/articleDetail/:id", element: lazyElement(<ArticleDetail />), }, 2 传递参数 使用 useNaviga…...

南京观海微电子-----PCB设计怎样降低EMI

开关模式电源是AC-DC或DC-DC电源的通用术语&#xff0c;这些电源使用具有快速开关动作的电路进行电压转换/转换(降压或升压)。随着每天开发出更多的设备(潜在的EMI受害者)&#xff0c;克服EMI成为工程师面临的主要挑战&#xff0c;并且实现电磁兼容性(EMC)与使设备正常运行同等…...

黑苹果/Mac如何升级 Mac 新系统 Sequoia Beta 版

Mac升级教程 有必要提醒一下大家&#xff0c;开发者测试版系统一般是给开发者测试用的&#xff0c;可能存在功能不完善、部分软件不兼容的情况&#xff0c;所以不建议普通用户升级&#xff0c;如果实在忍不住&#xff0c;升级之前记得做好备份。 升级方法很简单&#xff1a; …...

2024年主流工单系统横向对比

一&#xff1a;智齿科技 智齿客服App可以接收工单、查看工单、分配工单、处理工单&#xff0c;客户问题随时随地快速解决。 与云客户中心实时连接&#xff0c;客户以往的浏览轨迹、聊天信息、通话记录、工单历史一目了然。 配合智齿云呼叫中心/机器人客服/人工在线客服&…...

实用软件下载:Studio One最新安装包及详细安装教程

Studio One 6是一款功能丰富、专业级的音乐制作软件&#xff0c;它具备灵活的工作流程和高效的团队协作能力&#xff0c;能帮助用户实现高质量的音乐创作和制作。 智能模板更快的启动&#xff0c;全新的智能模板为你手头的任务提供了必要的工具集&#xff0c;包括基本录制、混音…...

网络安全练气篇——常见服务端口对应漏洞

常见的端口所对应的已知漏洞 21 FTP服务的数据传输端口 22 FTP服务的连接端口&#xff0c;可能存在 弱口令暴力破解 389 LDAP目录访问协议&#xff0c;有可能存在注入、弱口令 443 HTTPS端口&#xff0c;心脏滴血等与SSL有关的漏洞 445 SMB服务端口&#xff0c;可能存…...

WPF学习(3)--不同类通过接口实现同种方法

一、接口概述 1.接口的概念 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种引用类型&#xff0c;它定义了一组方法、属性、事件或索引器&#xff0c;但不提供实现。接口只定义成员的签名&#xff0c;而具体的实现由实现接口的类或结构体提供。接口使用关键字…...

体验版小程序访问不到后端接口请求失败问题解决方案

文章目录 解决方案一&#xff1a;配置合法域名解决方案二&#xff1a;开发调试模式第一步&#xff1a;进入开发调试模式第二步&#xff1a;启用开发调试 注意事项结语 &#x1f389;欢迎来到Java面试技巧专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…...

【Linux文件篇】磁盘到用户空间:Linux文件系统架构全景

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;我们前面的博客中一直提到的是被进程打开的文件&#xff0c;而系统中不仅仅只有被打开的文件还有很多没被打开的文件。如果没有被打开&#xff0c;那么文件是在哪里进行保存的呢?那我们又如何快速定位…...

数据分析-Excel基础函数的使用

Excel基础函数&#xff1a; sum:求和 sumif:单条件求和 sumifs:多条件求和 subtotal:根据筛选求和 if:逻辑判断 vlookup:连接匹配数据 match:查找数值在区域中的位置 index:根据区域的位置返回数值 match、index:一起使用&#xff1a;自动根据列名查找数据 sumifs、match、ind…...

速盾的防护策略有哪些?

在当今数字化时代&#xff0c;网络安全至关重要&#xff0c;而速盾作为一款优秀的安全防护工具&#xff0c;拥有一系列全面且有效的防护策略。 首先&#xff0c;速盾采用了先进的访问控制策略。通过严格的身份验证和授权机制&#xff0c;确保只有合法的用户和应用程序能够访问特…...

LabVIEW RT在非NI硬件上的应用与分析

LabVIEW RT&#xff08;实时操作系统&#xff09;可运行在非NI&#xff08;National Instruments&#xff09;硬件上&#xff0c;如研华工控机&#xff0c;但需要满足特定硬件要求。本文从硬件要求、开发和运行差异、可靠性、稳定性、优势和成本等多角度详细分析在非NI硬件上运…...

Zotero Duplicates Merger:终极文献去重解决方案,告别重复文献困扰

Zotero Duplicates Merger&#xff1a;终极文献去重解决方案&#xff0c;告别重复文献困扰 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 你是…...

【2024B站算法白皮书级洞察】:ChatGPT如何精准预测“推荐池准入阈值”?3个被官方文档隐去的关键信号

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;【2024B站算法白皮书级洞察】&#xff1a;ChatGPT如何精准预测“推荐池准入阈值”&#xff1f;3个被官方文档隐去的关键信号 Bilibili 2024年Q2推荐系统升级后&#xff0c;“推荐池准入阈值”&#xff…...

【紧急预警】ChatGPT默认图表存在3类隐性误导风险!金融/医疗行业已发生2起决策偏差事故

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT数据可视化建议 在利用ChatGPT辅助数据分析与可视化时&#xff0c;需特别注意输入提示&#xff08;prompt&#xff09;的结构化设计&#xff0c;以引导模型生成可执行、可复现的可视化代码。Cha…...

低查重AI写教材秘诀大揭秘!高效工具助你快速生成专业教材

一、AI教材写作的现状与需求 在编写教材之前&#xff0c;选择合适的工具常常让人感到无比纠结&#xff01;如果用普通的办公软件&#xff0c;功能显得太过于简单&#xff0c;想要搭建框架或者规范格式&#xff0c;都只能依靠手工操作&#xff1b;而如果选择了专业的教材编写工…...

书匠策AI:论文写作界的“开挂指南针“,教你用科技把毕业论文从地狱模式调成简单模式!

嗨&#xff0c;各位还在论文泥潭里挣扎的小伙伴们&#xff01;我是你们的论文科普老司机。 今天咱们不聊怎么堆文献、怎么憋摘要&#xff0c;我要给你们安利一个我偷偷用了两周、直接"真香"的写作神器——书匠策AI&#xff08; 官网直达&#xff1a;www.shujiangce.…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan搭建详细攻略

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan搭建详细攻略。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

Android Native逆向实战:Frida与IDA协同分析ART内存模型

1. 这不是“游戏外挂开发指南”&#xff0c;而是一次对移动应用安全边界的诚实测绘你打开手机里那个图标是蓝色小鸟、背景是木头和石头的《愤怒的小鸟》——它早已不是2010年那个靠物理引擎惊艳全场的休闲游戏&#xff0c;而是被无数人遗忘在角落、却仍静静躺在旧安卓设备里的“…...

终极教程:如何用免费Chrome插件一键保存完整网页内容

终极教程&#xff1a;如何用免费Chrome插件一键保存完整网页内容 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extens…...

MySQL 分库分表实战

&#xfeff;# MySQL 分库分表实战数据量到了千万级&#xff0c;单表扛不住了&#xff0c;就要分库分表。这篇说说怎么做。## 什么时候需要分库分表&#xff1f; 单表数据量&#xff1a; - < 500万&#xff1a;不用分&#xff0c;加索引、优化 SQL - 500万~2000万&#xff1…...

QMcDump终极指南:三步解锁QQ音乐加密文件,实现音乐自由

QMcDump终极指南&#xff1a;三步解锁QQ音乐加密文件&#xff0c;实现音乐自由 【免费下载链接】qmcdump 一个简单的QQ音乐解码&#xff08;qmcflac/qmc0/qmc3 转 flac/mp3&#xff09;&#xff0c;仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdum…...