linux高级编程(I/O)
fputc
int fputc(int c, FILE *stream);
功能:
向流中写入一个字符
参数:
c:要写入的字符
stream:文件流指针
返回值:
成功返回写入的字符ASCII码值
失败返回EOF
fgetc
int fgetc(FILE *stream);
功能:
从流中读取一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
读到文件末尾返回EOF(返回值与fputc一致)
失败返回EOF -1
c= fgetc(stdin);
fputc(c,stdout);
获取键盘上面的输入,显示到屏幕。
默认的流指针:
stdin --- 标准输入
stdout --- 标准输出
stderr --- 标准出错 --- 屏幕
-->问题:如何用最短的代码实现用户任意输入并打印输出。
要求用fgetc/fputc函数实现。
while(1) fputc(fgetc(stdin),stdout);
feof
功能:
判断当前参数stream的文件流指针是否到达文件结尾。
如果到达文件结尾则返回真,否则返回假
注意:该操作一定要在一次IO操作之后判断。
参数:
stream 要判断结尾的文件流对象
返回值:成功到达结尾是 真
否则 是假
fgets:
char *fgets(char *s, int size, FILE *stream);
功能:
从stream流对象关联的文件中获取size大小字节的文本数据
并存储到s对应的本地内存(栈区数组,堆区内存)
参数: s 要存储数据的本地内存
size 要获取的数据长度,单位字节。
stream 要获取的目标文件流对象,
可以是stdin ,程序会阻塞等待
如果是普通文件fp 则指向文件第一行数据
返回值:成功 返回指向有效数据的首地址,一般等于s的地址
失败 或者 文件末尾 NULL;
也就是说,由于传输的是字符串(字符串的储存方式是字符型数组),参数s与其返回值都是char*类型
fgets读取结束的条件:
1.EOF 文件结束
2.\n 读到 "换行符" 则读取结束
注意:
会被保存到 buffer(保存数据的这块内存中)
3.size-1 个字符
最后一个字符为'\0' //按字符串读写,
fputs:
int fputs(const char *s, FILE *stream);
功能:
从s所在的本地内存中获取一行数据,
并写入stream对应的文件流对象。
参数: s 要写的信息,一般是固定的字符串或者有数据的数组。
stream 要写入的目标文件流对象
返回值:成功 nonnegative number on success(成功写入的字符个数(非负数))
失败 -1;
fread:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr
所在的本地内存中。
参数:ptr 要存储数据的本地内存一般是数组或者结构体指针
size 单个数据块的元数据大小。最小单元的大小(为保证数据不会被截断,一般为1)
nmemb 要获取的数据块的个数,拷贝的数据块个数。(一般为sizeof(ptr))
stream 要获取数据的源文件流对象,如果是stdin表示从
键盘获取数据,如果是fp文件则表示从普通文件获取。
返回值:
成功 小于等于nemeb的整数,表示获取的数据长度
失败 小于0,结尾 0;
fwrite:
size_t fwrite(const void *ptr, size_t size,size_t nmemb, FILE *stream);
功能:从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应
的文件流对象中。
参数:ptr 要写的数据块地址,一般是数组或者结构体指针
size 要写的数据块元数据大小,单位是字节(为保证数据不会被截断,一般为1)
nmemb 要写的数据块的个数(一般为sizeof(ptr))->1个1个读,到sizeof(ptr)为止
stream 要写的目标文件流对象。如果是stdout则表示数据会
写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。
返回值:成功 小于等于nmemb 的个数。
失败 <0
fseek:
int fseek(FILE *stream, long offset, int whence);
功能:将stream流文件中的文件指针从whence位置开始
偏移offset字节的长度。
参数:stream 要移动文件指针的目标文件流对象。
注意:不支持设备文件,一般用于普通文件。
offset 要在文件内偏移的距离,单位字节。
如果值为整数,则向文件末尾偏移
如果值为负数,则向文件开头偏移
whence 偏移的起始位置,由系统定义的三个宏开始。
SEEK_SET 文件的开头位置
SEEK_CUR 文件的当前位置
SEEK_END 文件的末尾位置
返回值:
成功: 返回 0
失败: -1;
如果从文件的指定位置向后偏移过程中已经超过了文件
的当前末尾位置,则会自动以'\0'来填充文件内容,从
而形成一种被称为"空洞文件" 的特殊文件。(例如判断是否有足够大的空间供下载)
feek(fp,0,SEEK_END);
fputs("",fp);
因为fputs的第一个参数要求是char *,因此用""来代表'\0'
ftell:
long int ftell(FILE *stream)
功能:返回流指针相对于文件起始位置的偏移量
参数:流指针FILE *stream
返回值:该函数返回返回流指针相对于文件起始位置的偏移量。如果发生错误,则返回 -1,否则为正值
rewind:
void rewind(FILE *stream)
- 将文件指针定位到文件的开始位置。
- 清空与文件流相关的所有错误指示符。
文件I/O汇总:
fopen(); //开
fclose(); //关
fputc/fgetc //读,写
fputs/fgets
fwrite/fread
fseek, //偏移
ftell, //定位
rewind //重定向(回开头)
相关文章:
linux高级编程(I/O)
fputc int fputc(int c, FILE *stream); 功能: 向流中写入一个字符 参数: c:要写入的字符 stream:文件流指针 返回值: 成功返回写入的字符ASCII码值 失败返回EOF fgetc int fgetc(FILE *stream); 功能: 从流中读取一个字符 参数: stream:文件流…...
Java面试——认证与授权
X、常见面试题汇总 1、Shiro与SpringSecutity对比 1)Shiro的特点: Shiro 是 Apache 下的项目,相对简单、轻巧,更容易上手使用。 Shiro 权限功能基本都能满足,单点登录都可以实现。且不用与任何的框架或者容器绑定, 可…...
【经典算法OJ题讲解】
1.移除元素 经典算法OJ题1: 移除元素 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-element/desc…...
大数据面试题之Zookeeper面试题
目录 1、介绍下Zookeeper是什么? 2、Zookeeper有什么作用?优缺点?有什么应用场景? 3、Zookeeper的选举策略,leader和follower的区别? 4、介绍下Zookeeper选举算法 5、Zookeeper的节点类型有哪些?分别作用是什么? 6、Zookeeper的节点数怎么设置比较好? …...
JVM 内存区域
一、运行时数据区域 Java 虚拟机在执行 Java 程序的过程中,会把它管理的内存划分成若干个不同的数据区域。 JDK 1.8 和之前的版本略有不同,这里介绍 JDK 1.7 和 JDK 1.8 两个版本。 JDK 1.7: 线程私有: 程序计数器虚拟机栈本地…...
全网最强剖析Spring AOP底层原理
相信各位读者对于Spring AOP的理解都是一知半解,只懂使用,却不懂原理。网上关于Spring AOP的讲解层出不穷,但是易于理解,让人真正掌握原理的文章屈指可数。笔者针对这一痛点需求,决定写一篇关于Spring AOP原理的优质博…...
Vscode中的行尾序列CRLF/LF不兼容问题
最近开发的的时候,打开项目文件经常会出现爆红错误提示信息,显示如下图: 这东西太烦人了,毕竟谁都不希望在遍地都是爆红的代码里写东西,就像能解决这个问题,根据提示可以知道这是vscode中使用的prettier插件…...
常见加密方式:MD5、DES/AES、RSA、Base64
16/32位的数据,最有可能就是使用md5加密的 使用对称加密的时候,双方使用相同的私钥 私钥:单独请求/隐藏在前端的隐藏标签当中 二、RSA非对称密钥加密 公钥加密,私钥解密 私钥是通过公钥计算生成的 加密解密算法都在js源文件当…...
如何在 C++/Qt/CMake 项目中构建 Rust 代码
问题描述 我有一个使用 CMake 构建的现有 C/Qt 项目,我想开始添加 Rust 代码,并能够从主 C 代码库中调用这些 Rust 代码。应该如何组织项目结构? 现有项目结构 ./CMakeLists.txt ./subproject-foo/CMakeLists.txt ./subproject-foo/src/..…...
封装了一个优雅的iOS转场动画
效果图 代码 // // LBTransition.m // LBWaterFallLayout_Example // // Created by mac on 2024/6/16. // Copyright © 2024 liuboliu. All rights reserved. //#import "LBTransition.h"interface LBPushAnimation:NSObject<UIViewControllerAnimated…...
数据中心技术:大数据时代的机遇与挑战
在大数据时代,数据中心网络对于存储和处理大量信息至关重要。随着云计算的出现,数据中心已成为现代技术的支柱,支持社交媒体、金融服务等众多行业。然而,生成和处理的大量数据带来了一些挑战,需要创新的解决方案。在这…...
29、架构-技术方法论之向微服务迈进
治理:理解系统复杂性 微服务架构的引入增加了系统的复杂性,这种复杂性不仅体现在技术层面,还包括组织、管理和运维等各个方面。本节将详细探讨微服务架构的复杂性来源,并介绍一些应对复杂性的治理策略。 1. 什么是治理 治理是指…...
点云处理实操 1. 求解点云法向
目录 一、点云法向的定义 二、如何计算计算法向量 三、实操 四、代码 main.cpp CMakeList.txt 一、点云法向的定义 点云法向量是指点云中某个点的局部表面法向量(Normal Vector)。法向量在三维空间中用来描述表面在该点处的方向属性,它是表面几何特征的重要描述工具。…...
XSS+CSRF组合拳
目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 (案例中将使用cms靶场来进行演示) 在实战中CSRF利用条件十分苛刻,因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…...
PasteSpiderFile文件同步管理端使用说明(V24.6.21.1)
PasteSpider作为一款适合开发人员的部署管理工具,特意针对开发人员的日常情况做了一个PasteSpiderFile客户端,用于windows上的开发人员迅速的更新发布自己的最新代码到服务器上! 虽然PasteSpider也支持svn/git的源码拉取,自动编译…...
NLP中两种不同的中文分词形式,jieba和spaCy
1. jieba分词 import jiebatext在中国古代文化中,书法和绘画是艺术的重要表现形式。古人常说,‘文字如其人’,通过墨迹可以窥见作者的性情和气质。而画家则以笔墨搏击,表现出山川河流、花鸟虫鱼的灵动。这些艺术形式不仅仅是技艺…...
【数据库】四、数据库编程(SQL编程)
四、数据库编程 另一个大纲: 5.1存储过程 5.1.1存储过程基本概念 5.1.2创建存储过程 5.1.3存储过程体 5.1.4调用存储过程 5.1.5删除 5.2存储函数 5.2.1创建存储函数 5.2.2调用存储函数 5.2.3删除存储函数 目录 文章目录 四、数据库编程1.SQL编程基础1.1常量1.2变…...
17.RedHat认证-Ansible自动化运维(下)
17.RedHat认证-Ansible自动化运维(下) 这个章节讲ansible的变量,包括变量的定义、变量的规则、变量范围、变量优先级、变量练习等。 以及对于tasks的控制,主要有loop循环作业、条件判断等 变量 介绍 Ansible支持变量功能,能将value存储到…...
React Suspense的原理
React Suspense组件的作用是当组件未完成加载时,显示 fallback 组件。那么 Suspense 是如何实现的呢?React 的渲染是通过 Fiber 进行的,Suspense 的更新机制也是要围绕 Fiber 架构进行的。Suspense 是由两部分组成,实际 UI 子组件…...
React的生命周期函数详解
import React,{Component} from "react";import SonApp from ./sonAppclass App extends Component{state{hobby:爱吃很多好吃的}// 是否要更新数据,这里返回true才会更新数据shouldComponentUpdate(nextProps,nextState){console.log("app.js第一步…...
LZ4压缩算法演进:从r131到v1.9.5的终极速度革命 [特殊字符]
LZ4压缩算法演进:从r131到v1.9.5的终极速度革命 🚀 【免费下载链接】lz4 Extremely Fast Compression algorithm 项目地址: https://gitcode.com/GitHub_Trending/lz/lz4 LZ4作为当今最快的无损压缩算法之一,自诞生以来经历了令人瞩目…...
如何构建和谐开源社区:fg-data-profiling贡献者行为准则与实践指南
如何构建和谐开源社区:fg-data-profiling贡献者行为准则与实践指南 【免费下载链接】fg-data-profiling 1 Line of code data quality profiling & exploratory data analysis for Pandas and Spark DataFrames. 项目地址: https://gitcode.com/gh_mirrors/y…...
Claude Code 工具提示词全拆解:AI Agent、Prompt Engineering、工具调用、上下文工程、自动化编程的底层逻辑
开篇导读很多人做 AI Agent 时,最容易盯着模型参数、系统提示词、工具数量,却忽略了一个非常关键的细节:每一个工具自己的提示词。它看起来只是一个 description 字段,实际上却在悄悄决定模型什么时候用工具、怎样用工具、不能做什…...
Linux MySQL服务器SSH多端口配置:解决22端口禁直连,兼顾安全与运维
公司Linux服务器(尤其是MySQL数据库服务器)出于安全管控,明确禁止直连22端口,要求所有SSH登录必须使用自定义端口;但22端口又不能修改或关闭,需保留给堡垒机、安全审计等核心服务使用。一边是安全策略的硬性…...
Harmonix:轻量级AI音乐源分离实战指南
1. 项目概述:当AI遇见音乐,Harmonix如何重塑音频处理如果你和我一样,既对音乐制作充满热情,又对AI技术的前沿应用保持好奇,那么最近在GitHub上悄然走红的awslabs/harmonix项目,绝对值得你花上一个下午的时间…...
嵌入式游戏UI与动画实战:基于CircuitPython的对话框系统与位图动画实现
1. 项目概述与核心价值如果你在嵌入式平台上做过游戏开发,尤其是那种带有复古像素风格和复杂交互逻辑的项目,你肯定遇到过两个绕不开的难题:如何优雅地处理用户输入和反馈,以及如何在有限的硬件资源下实现流畅的动画效果。最近我在…...
脉动阵列架构与DNN加速:FORTALESA容错设计解析
1. 脉动阵列架构与DNN加速基础在深度学习硬件加速领域,脉动阵列(Systolic Array)因其规则的并行计算结构而成为主流选择。这种架构最早由H.T.Kung在1982年提出,其核心思想是通过数据的有节奏流动(如同心脏的收缩舒张)实现高效的矩…...
Android性能与功耗深度优化:从理论到实践
引言 在当今移动互联网时代,用户体验是应用成功的关键因素之一。流畅的操作、快速的响应、持久的续航,这些都与应用的性能和功耗表现息息相关。对于Android开发工程师而言,深入理解系统机制并掌握性能与功耗优化技术,已从加分项变为必备技能。特别是在金融、游戏、直播等对…...
运维AIOPS关键技术体系二
运维AIOps关键技术体系:从感知到自愈的五层架构与工程实践 引言:从“人驱动”到“数据驱动”的运维革命 凌晨三点,某头部电商的运维中心大屏上弹出一条告警:“支付网关p99延迟突增至2.3秒”。不同于传统运维的慌乱,AIOps平台在5秒内自动关联了Redis集群的内存使用率、数…...
影刀 RPA 给出的企业落地 RPA 项目的组织效率方案
一、组织架构与角色分工 1. 核心角色与职责 表格 角色 核心属性 关键职责 项目经理 管理属性 统筹 RPA 项目全流程:培训信息统计、账号协调、需求评估、进度管理、成果汇报 RPA 专员 强开发属性 承接高价值、高难度流程开发;可与项目经理为同一人 业务部门 需求 + 使用 + 弱…...
