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

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"

相关文章:

  • 【传知代码】DETR[端到端目标检测](论文复现)
  • Hash String 学习笔记
  • 简单通用的系统安装、备份、还原方法,支持 ARM 系统【Ventory+FirePE+DiskGenius】
  • 安装node
  • 数据结构笔记2 栈和队列
  • 服务器数据恢复—服务器raid5上层zfs文件系统数据恢复案例
  • java线程池介绍
  • 2024 IDEA最新永久使用码教程(2099版)
  • 前端渲染大量数据思路【虚拟列表】【异步机制】
  • Torrent、Magnet链
  • ASP.NET第五章 Application、Session和Cookie对象
  • Python中包(package)与模块(module)的概念 以及 import 问题
  • Linux基本指令查询硬件信息001
  • reset database to incarnation rman 恢复最早的全备方法
  • MongoDB CRUD操作:地理位置应用——通过地理空间查询查找餐厅
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Centos6.8 使用rpm安装mysql5.7
  • django开发-定时任务的使用
  • es6--symbol
  • gops —— Go 程序诊断分析工具
  • javascript面向对象之创建对象
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js
  • MySQL QA
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • WePY 在小程序性能调优上做出的探究
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端代码风格自动化系列(二)之Commitlint
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 说说动画卡顿的解决方案
  • 微服务框架lagom
  • 我的业余项目总结
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​zookeeper集群配置与启动
  • ​业务双活的数据切换思路设计(下)
  • #if #elif #endif
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (152)时序收敛--->(02)时序收敛二
  • (3)选择元素——(17)练习(Exercises)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (多级缓存)缓存同步
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)http-server应用
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET MVC 验证码
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net(C#)中String.Format如何使用
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .net8.0与halcon编程环境构建