Linux | 标准IO编程

Linux | 标准IO编程


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

文章目录

  • `Linux` | 标准`IO`编程
    • 1.标准`IO`编程
      • 1-1.流的打开
      • 1-2.流的关闭
      • 1-3.错误处理
        • 函数原型perror
          • 参数
          • 功能
          • 返回值
          • 使用示例
          • 注意事项
          • 额外信息
        • 函数原型strerror
          • 参数
          • 返回值
          • 使用示例
          • 注意事项
          • errno 变量
          • 总结
      • 1-4.流的读写
        • 1-4-1.按字符(字节)输入/输出
          • 实例
        • 1-4-2.按行输入/输出
        • 1-4-3.以指定大小为单位读写文件
      • 1-5.流的定位
        • fseek()函数
      • 函数原型
      • 参数说明
        • 示例 2:将文件指针从当前位置向后移动 100 个字节
      • 注意事项
        • ftell()函数
      • 函数原型
      • 参数说明
      • 返回值
      • 示例和用法
        • 示例 1:读取文件并输出当前位置
        • 示例 2:只获取文件大小(不是标准方法,但可以用作简单示例)
      • 注意事项
      • 1-6.格式化输入输出
        • 格式化输入函数
        • 格式化输出函数

1.标准IO编程

1-1.流的打开

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 是 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 是 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"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/24662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【国产NI替代】SMU 源测量仪:源测量单元平台主要用于半导体、传感器、模组等 IVR 测试测量

• 集 5 台仪器 (数字万用表、电压源、电流源、电子负载和脉冲发生器) 功能于⼀体 • 典型输出源及测量精度 02%&#xff0c;支持直流/脉冲输出模式 • 脉冲输出模式&#xff0c;最⼩脉冲宽度 100 us &#xff0c;上升时间 10 us • 具有 pA 级分辨率高精度源&#xff0c;且…

【Python机器学习】PCA——特征提取(1)

PCA的一个重要应用是特征提取。特征提取背后的思想是&#xff0c;可以找到一种数据表示&#xff0c;比给定的原始表示更适合于分析。特征提取很有用&#xff0c;它的一个很好的应用实例就是图像。图像由像素组成&#xff0c;通常存储于红绿蓝强度。图像中的对象通常由上千个像素…

c++【入门】已知一个圆的半径,求解该圆的面积和周长?

限制 时间限制 : 1 秒 内存限制 : 128 MB 已知一个圆的半径&#xff0c;求解该圆的面积和周长 输入 输入只有一行&#xff0c;只有1个整数。 输出 输出只有两行&#xff0c;一行面积&#xff0c;一行周长。&#xff08;保留两位小数&#xff09;。 令pi3.1415926 样例…

图论第8天

685.冗余连接II 这题需要考虑两种情况&#xff1a; 1.两个输入 2.没有两个输入就是有成环 class Solution { public:static const int N 1005;int father[N];int n;void init(){for (int i 0; i < n; i){father[i] i;}}int find(int x){return x father[x] ? x : f…

Python——用新字符替换字符串中的旧字符

替换方法&#xff1a; string.replace&#xff08;old&#xff0c;new [&#xff0c;count]&#xff09;参考文章&#xff1a; Python程序用特定字符替换字符串中的空格

变声器软件免费版有哪些?国内外12大热门变声器大盘点!(新)

变声软件是一种人工智能AI音频处理工具&#xff0c;允许用户实时修改自己的声音或改变预先录制的音频。这些软件解决方案可提供不同的效果&#xff0c;如改变声音的音调或速度&#xff0c;或将我们的声音转换成其他人或其他东西的声音&#xff0c;如名人、卡通人物、机器人或不…

【C/C++】相机标定

参考文章 相机标定&#xff08;Camera calibration&#xff09;原理、步

WinForms 应用(.NET 8.0)使用ReportViewerCore.WinForms显示打印RDLC报表

在要WinForms 应用&#xff08;.NET 8.0&#xff09;中&#xff0c;显示RDLC报表&#xff0c;就要使用ReportViewerCore.WinForms。原来的ReportViewer只能在.NET Framework框架下运行。 1.ReportViewerCore.WinForms 程序包说明 SQL Server Reporting Services ReportViewer…

Windows下使用netty的SelfSignedCertificate进行SSL加密通信

在使用netty的时候&#xff0c;经常需要对通信进行SSL加密&#xff0c;这就需要相关的证书和秘钥&#xff1b; 当我们在自己的开发环境中进行测试的时候&#xff0c;有一个非常简单的方法来创建证书和私钥文件&#xff0c;netty提供了SelfSignedCertificate类。 SelfSignedCer…

UG12编程怎么没有:深度解析与困惑探寻

UG12编程怎么没有&#xff1a;深度解析与困惑探寻 UG12编程作为现代制造业的重要工具&#xff0c;其应用广泛且功能强大。然而&#xff0c;对于初学者或某些特定需求的用户来说&#xff0c;有时可能会遇到“UG12编程怎么没有”的困惑。这种困惑可能源于软件功能的不熟悉、操作…

[stm32]——uc/OS-III多任务程序

目录 一、获取uC/OS-III源码 二、移植源代码 &#xff08;1&#xff09;建立工程文件 &#xff08;2&#xff09;移植uC/OS-III源码 &#xff08;3&#xff09;添加工程组件和头文件路径 &#xff08;4&#xff09;添加头文件路径 三、修改代码 总结 一、获取uC/OS-III源码 …

【Vue】声明式导航-自定义类名(了解)

问题 router-link的两个高亮类名 太长了&#xff0c;我们希望能定制怎么办 解决方案 我们可以在创建路由对象时&#xff0c;额外配置两个配置项即可。 linkActiveClass和linkExactActiveClass const router new VueRouter({routes: [...],linkActiveClass: "类名1&quo…

【中篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史

YOLO 型号之所以闻名遐迩,主要有两个原因:其速度和准确性令人印象深刻,而且能够快速、可靠地检测图像中的物体。上回我解释了Yolo v1, 今天从Yolov2开始。 YOLOv2:更好、更快、更强 2017 年 7 月一个闷热的星期二下午,雷德蒙(Joseph Redmon, Yolo创始人)再次走上舞台。 …

Android gradle kts 8.0以上版本配置签名和修改APK输出名字

目录 概述修改签名配置新建签名文件目录配置签名信息使用签名信息打包 修改APK名称 概述 之前写过一篇文章是通过Kotlin的Dsl结合gradle编写的插件来管理项目依赖&#xff0c;我是从一个开源项目叫DanDanPlayAndroid项目上学到的&#xff0c;那时还没有使用toml文件来管理项目…

【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南

文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…

【原创】springboot+mysql农业园区管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

公差基础(互换性和测量基础)

互换性概念&#xff1a; 图纸设计是理论的&#xff0c;理性的&#xff0c;没有误差的&#xff0c;但是实际上加工上市有误差的。 所以说&#xff0c;实际加工出来的零件是否符合要求&#xff0c;我们需要对图纸上的尺寸精度&#xff0c;几何精度&#xff0c;表面粗糙度进行说明…

STM32关于uc/OS-III的多任务程序

目录 一、UCOS-III源码获取 二、HAL库工程的建立 1.RCC配置 2.SYS配置 3.USART1配置 4.GPIO配置 5.时钟配置 6.项目配置 三、KEil文件添加 1.文件复制 2.KEil工程添加 3.添加文件路径 四、代码修改 1. 2.修改文件app_cfg.h中代码 3.修改include.h的代码 4.修改…

【传知代码】DETR[端到端目标检测](论文复现)

前言&#xff1a;想象一下&#xff0c;当自动驾驶汽车行驶在繁忙的街道上&#xff0c;DETR能够实时识别出道路上的行人、车辆、交通标志等目标&#xff0c;并准确预测出它们的位置和轨迹。这对于提高自动驾驶的安全性、减少交通事故具有重要意义。同样&#xff0c;在安防监控、…

【二进制部署k8s-1.29.4】十、coredns的安装部署

文章目录 简介 一.下载并修改coredns配置文件二.安装coredns三.验证coredns的安装 简介 本章节主要讲解安装coredns-v1.11.1的安装&#xff0c;并进行验证。 第一章.安装前软件准备及系统初始化阶段 第二章.证书及配置文件的准备 一.下载并修改coredns配置文件 下载地址&#x…