IO进程_day1

目录

概要

标准IO

1.概念:

2.特点:

3.缓存区

3.1行缓存:和终端操作相关

3.2全缓存:和文件操作相关

​​​​​​​3.3不缓存:标准错误 stderr

4.函数

​​​​​​​4.1打开文件

​​​​​​​4.2关闭文件

​​​​​​​4.3读写文件

​​​​​​​4.3.1每次一个字符的读写

fgetc

fputc

​​​​​​​4.3.2每次一个字符串的读写

fgets

fputs

​​​​​​​4.3.3二进制读写文件

fread

fwrite

​​​​​​​4.4文件定位操作

rewind

fseek

ftell


概要

IO:

标准IO

文件IO

文件属性获取

目录操作

库:静态库、动态库

进程:

进程

线程

进程间的通信:7种 6

面向应用,学习大量函数 70左右,功能、参数、返回值,man手册

标准IO

文件类型

b s p -(普通文件) l c d

1.概念:

C库中定义的一组用于输入输出函数

2.特点:

  1. 有缓存区(缓冲机制),通过缓冲机制减少系统调用的次数,提高效率

补充:系统调用:内核向上提供的一组接口

  1. 围绕进行操作,流用FILE*来描述,FILE代表的是结构体,描述所操作文件的信息
  2. 默认打开了三个流:stdin(标准输入)、stdout(标准输出)、stderr(标准错误)

补充:sudo ctags -R的使用(可以追代码)

vi -t FILE(typedef定义数据类型、宏定义、结构体等)

选择合适的编号

将光标定位在目标位置,ctrl+] :向下追代码

ctrl+t:回退

q:退出

3.缓存区

3.1行缓存:和终端操作相关

刷新缓存的条件:

  1. 程序正常退出
  2. \n刷新
  3. 缓存区满

除了这种验证缓存区大小之外还有其他的验证方式

   4.强制刷新 fflush

​​​​​​​3.2全缓存:和文件操作相关

刷新缓存条件:

  1. 程序正常退出
  2. 缓存区满刷新
  3. 强制刷新 fflush

​​​​​​​3.3不缓存:标准错误 stderr

4.函数

​​​​​​​4.1打开文件

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
参数:path:打开文件mode:打开方式r:只读,流被定位到文件开头r+:可读可写,流被定位到文件开头w:只写,文件不存在创建,文件存在清空,流被定位到文件开头w+:可读可写,文件不存在创建,文件存在清空,流被定位到文件开头a:追加,文件不存在创建存在追加,流被定位到文件末尾a+:可读可写,文件不存在创建,存在追加,开始进行读时从头读,进行写时流被定位到文件末尾
返回值:成功:文件流失败:NULL,并且设置errno(错误码)

示例:

​​​​​​​4.2关闭文件

#include<stdio.h>
int fclose(FILE* stream);
功能:关闭文件
参数:stream:文件流

示例:

​​​​​​​4.3读写文件

​​​​​​​4.3.1每次一个字符的读写

fgetc
#include <stdio.h>
int fgetc(FILE *stream);
功能:从文件中读一个字符
参数:stream:文件流
返回值:成功:读到字符失败或读到文件末尾:EOF(-1)

示例:

补充:

#include <stdio.h>
int ferror(FILE *stream);
功能:判断读文件时是否出错
返回值:非0表示出错int feof(FILE *stream);
功能:判断读文件时是否到文件末尾
返回值:非0表示读到文件末尾

示例:

fputc
#include <stdio.h>
int fputc(int c, FILE * stream)
功能:向文件中写入一个字符
参数:c:要写的字符stream:文件流
返回值:成功:写的字符的ASCII失败:EOF

示例:

​​​​​​​4.3.2每次一个字符串的读写

fgets
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
功能:从文件中读取一串字符
参数:s:存放读取的字符串的首地址size:读取的大小stream:文件流
返回值:成功:读取的字符串的首地址失败或读到文件末尾:NULL特性:1.一次调用最多读取一行数据2.实际读到个数为size-1个,末尾自动添加\0

示例:

fputs
#include <stdio.h>
int  fputs(const char *s,  FILE *stream);
功能:向文件中写字符串
参数:s:要写的内容stream:文件流
返回值:成功:非负整数失败:EOF

​​​​​​​4.3.3二进制读写文件

可以读写任意类型的数据,以二进制的方式进行读写

fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件流读取多个元素
参数:	ptr :用来存放读取元素 (可以用来读取任意类型的数据)size :元素大小  sizeof(数据类型)nmemb :读取对象的个数stream :要读取的文件
返回值:成功:读取对象的个数读到文件尾或失败:0

fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:按对象写
参数:同上	
返回值:成功:写的元素个数失败 :0

示例:

练习:编程实现cat命令功能。

cat 文件名

思路:打开文件,循环读文件,当读到文件末尾时循环结束,打印读到的数据,关闭文件

练习:编程实现wc -l命令的功能

wc -l 文件名:显示文件的行数

思路:打开文件,循环读文件,当读到文件末尾时循环结束,在循环中判断是否是一行,如果是则对整型变量进行自加,关闭文件。

​​​​​​​4.4文件定位操作

rewind
void rewind(FILE *stream);
功能:将文件位置指针定位到起始位置

fseek
int fseek(FILE *stream, long offset, int whence);
功能:文件的定位操作
参数:stream:文件流offset:偏移量:正数表示向后文件尾部偏移,负数表示向文件开头偏移whence:相对位置:SEEK_SET:相对于文件开头SEEK_CUR:相对于文件当前位置SEEK_END:相对于文件末尾
返回值:成功:0失败:-1

示例:

fseek(fp, 10, SEEK_SET);

fputc('a', fp);

(前面显示的是一个占位的作用,并没有实际的数据)

fseek(fp, -5, SEEK_CUR);
fputc('b', fp);

ftell
long ftell(FILE *stream);
功能:获取位置指针当前的文件位置
参数:要检测的文件流
返回值:成功:当前的文件位置,出错:-1

补充:

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

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

相关文章

Java项目-基于springboot框架的体育馆运营系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

【STM32学习】PWM学习(四),散热风扇的控制,PWM调速调制,

目录 1、基础概念 2、PWM调速风扇功能介绍 2.1风扇功率 2.2、PWM输出流程图 2.3、PWM占空比计算 2.4参数计算 3、配置实现 3.1、添加TIM1功能 3.2、生成代码 3.3、修改代码 1、基础概念 参考&#xff1a;【STM32学习】PWM脉冲宽度调制学习笔记&#xff0c;&#xff…

量化交易:最大回撤(Drawdown)算法

量化交易:最大回撤(Drawdown)算法 写在前面: 本文为本人学习用于回测报告中的最大回撤算法指标时整理的学习笔记,欢迎沟通交流~ 一、基本概念 1.1 最大回撤(Max Drawdown) 回撤:对于任意日期区间,回撤 = 钱包的亏损比例 =(现值 - 原值)/ 原值 = 现值 / 原值 - 1 =…

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

java -jar 命令自动重启 Java 项目

一、java -jar 方式运行项目 重启Java项目通常意味着你需要先停止当前运行的Java进程&#xff0c;然后再次启动它。下面是在CentOS上执行这些步骤的一种常见方法&#xff1a; 停止Java进程 找到Java进程的PID&#xff1a; 使用ps命令配合grep来查找运行中的Java进程的PID&#…

关于WPF项目降低.Net版本

本来有项目是.NET Framework 4.8的&#xff0c;为了兼容升级到.NET 8.0&#xff0c;后期又为了兼容放弃.NET 8.0&#xff0c;升级的步骤&#xff1a;利用vs2022 的 .NET Upgrade Assistant 扩展&#xff0c;磕磕绊绊也升级完成了&#xff1b; 扩展链接&#xff1a; Upgrading…

windows下安装VirtualBox7.1.4

记录详细的安装过程与遇到的问题&#xff1b; 下载地址 virtualbox官网 清华镜像源下载 下载完成后文件&#xff1a; 双击打开&#xff1b; 报错了 意思是需要pc上先安装Microsoft Visual C 2019 https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redi…

分布式数据库环境(HBase分布式数据库)的搭建与配置

分布式数据库环境&#xff08;HBase分布式数据库&#xff09;的搭建与配置 1. VMWare安装CentOS7.9.20091.1 下载 CentOS7.9.2009 映像文件1.2启动 VMware WorkstationPro&#xff0c;点击“创建新的虚拟机”1.3在新建虚拟机向导界面选择“典型&#xff08;推荐&#xff09;”1…

2024java高频面试之JVM

说说 JVM 内存区域 程序计数器 是「程序控制流的指示器&#xff0c;循环&#xff0c;跳转&#xff0c;异常处理&#xff0c;线程的恢复等工作都需要依赖程序计数器去完成」。程序计数器是「线程私有」的&#xff0c;它的「生命周期是和线程保持一致」的&#xff0c;我们知道&a…

【STM32开发笔记】移植AI框架TensorFlow【DSP指令加速篇】

【STM32开发笔记】移植AI框架TensorFlow【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN&#xff1f;2.2 CMSIS-NN是什么&#xff1f;2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM中CMSIS-NN相关…

【前端学习】HTML+CSS+JavaScript 入门教程

文章目录 前言1. HTML、CSS、JavaScript 的关系2. HTML2.1 什么是 HTML2.2 认识标签2.3 HTML 常见标签1&#xff09;标题标签&#xff1a;h1 - h62&#xff09;段落标签&#xff1a;p3&#xff09;换行标签&#xff1a;br4&#xff09;图片标签&#xff1a;img5&#xff09;超链…

Linux系统:(Linux系统概述与安装)

硬件计算机硬件是指计算机系统中所有物理部件的总称。包括计算机主机、显示器、键盘、鼠标、内存、硬盘、处理器、主板等等。这些硬件部件是计算机系统运行的基础 不管是电脑系统(个人电脑、服务器等)、还是移动端操作系统(手机、平板等)。它的功能就是做为用户和硬件之间的桥梁…

Java配置 Redis 连接互斥锁或队列预先加载缓存

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

2024年龙信

挂载VC的密码&#xff1a;MjAyNOmmeS/oeadrw 手机取证 1. Android 设备在通过 ADB 连接时&#xff0c;通常会要求用户授权连接&#xff0c;会要求用户确认设备授权&#xff0c;并将该设备的公钥保存在 adb_keys文件中 寻找到data/misc/adb/adb_keys下面有中有两个&#xff0c;…

动态规划:17.简单多状态 dp 问题_买卖股票的最佳时机III_C++

题目链接&#xff1a; 一、题目解析 题目&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 解析&#xff1a; 拿示例1举例&#xff1a; 我们可以如图所示买入卖出股票&#xff0c;以求得最大利润&#xff0c;并且交易次数不超过2次 拿示…

webpack自定义插件 ChangeScriptSrcPlugin

插件文件 class ChangeScriptSrcPlugin {apply(compiler) {const pluginName "ChangeScriptSrcPlugin";compiler.hooks.compilation.tap(pluginName, (compilation, callback) > {compilation.hooks.htmlWebpackPluginAlterAssetTags.tapAsync(pluginName,(html…

N9305高品质mp3音频语音芯片ic在早教故事机的应用方案

随着人们对教育的重视程度不断提高&#xff0c;儿童早教机已经成为了很多家庭的教育必备品。N9305音乐芯片在早教故事机中的应用&#xff0c;不仅为孩子们带来了丰富多彩的故事世界&#xff0c;还以其卓越的音质表现和功能&#xff0c;进一步提升了早教体验。 九芯电子N9305高品…

HarmonyOS Next模拟器异常问题及解决方法

1、问题1&#xff1a;Failed to get the device apiVersion. 解决方法&#xff1a;关闭模拟器清除用户数据重启

Kafka之消费者组与消费者

消费者&#xff08;Consumer&#xff09;在Kafka的体系结构中是用来负责订阅Kafka中的主题&#xff08;Topic&#xff09;&#xff0c;并从订阅的主题中拉取消息后进行处理。 与其他消息中间件不同&#xff0c;Kafka引入一个逻辑概念——消费组&#xff08;Consumer Group&…

黑马程序员Java笔记整理(day03)

1.switch 2.for与while对比 3.嵌套定义,输出的区别性 4.break与continue 5.随机数生成的两种方式 6.Random 7.随机验证码