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)

  1. 将文件指针定位到文件的开始位置。
  2. 清空与文件流相关的所有错误指示符。

文件I/O汇总:

    fopen();    //开
    fclose();   //关
    
    fputc/fgetc    //读,写
    fputs/fgets
    fwrite/fread
    
    fseek,  //偏移
    ftell,  //定位
    rewind  //重定向(回开头)

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

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

相关文章

SAPUI5基础知识8 - 模块(Module)的使用

1. 背景 在SAPUI5中&#xff0c;几乎所有东西都是一个模块&#xff08;例如&#xff1a;控件&#xff0c;控制器&#xff0c;组件等等&#xff09;&#xff0c;通过依赖管理&#xff0c;模块间可以相互调用。这样做的好处是&#xff0c;可以仅在需要时才去加载必需的模块&…

基于单片机的智能台灯控制系统

摘要&#xff1a; 文章设计一款单片机智能台灯控制系统&#xff0c;实现对台灯的手动和自动控制功能&#xff0c;以 STC89C52 单片机作为多功能智能台灯的主控制器&#xff0c;光电检测模块检测坐姿&#xff0c;红外传感器检测人体&#xff0c;光敏电阻检测光强&#xff0c;同…

怀庄酒厂在茅台镇排第几,怀庄酒都什么档次?

怀庄酒厂在茅台镇的排名如何&#xff1f;怀庄酒又属于什么档次&#xff1f;贵州怀庄酒业(集团)有限责任公司旗下的怀庄之醉&#xff0c;作为公司的重点直营品牌&#xff0c;定位于中高端酱酒市场&#xff0c;以其出色的品质和独特的风味受到消费者的青睐。 在众多贵州酒厂中&am…

搭建淘宝扭蛋机小程序需要满足哪些条件

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;以其便捷、高效的特点&#xff0c;逐渐成为了用户日常生活中不可或缺的一部分。特别是在电商平台中&#xff0c;小程序为商家和用户之间提供了更为直接的沟通桥梁。在这样一个背景下&#xff0c;搭建…

LeetCode题练习与总结:只出现一次的数字--136

一、题目描述 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; …

C++ 检查内存泄漏

在Visual Studio中&#xff0c;通过定义自定义的new和delete操作符来检查内存泄漏并输出到输出窗口&#xff08;通常是“输出”面板&#xff09;并不是直接支持的&#xff0c;因为new操作符的调试版本&#xff08;如使用_NORMAL_BLOCK, __FILE__, __LINE__&#xff09;是由Micr…

深入理解Pandas

文章目录 引言Pandas的原理SeriesDataFrame Pandas的使用安装Pandas读取数据数据处理数据可视化 结论 引言 在数据分析和数据科学领域&#xff0c;Pandas无疑是一个不可或缺的工具。Pandas是一个强大的Python库&#xff0c;提供了快速、灵活和易于使用的数据结构和数据分析工具…

VoxEdit 竞赛|为 The Sandbox 土地持有者设计专属奖励资产

邀请大家参与这场精彩的 VoxEdit 竞赛&#xff0c;在元宇宙中发挥你的创造力&#xff0c;并将你的体素技能提升到新的水平&#xff01; 按此下载 VoxEdit &#xff01; https://www.sandbox.game/en/create/vox-edit/ 比赛主题&#xff1a;建筑与古迹 一起潜入建筑和古迹的世…

【面试题】马上金九银十了,简历该准备起来了,面试题你准备好了吗 ?浅谈 JS 浅拷贝和深拷贝

代码展示 let obj_old {name: Tom,age: 15,favorite: {food: bread,drink: milk} } let obj_new {...obj_old} console.log(obj_old obj_new) // false console.log(obj_old.name obj_new.name) // true console.log(obj_old.favorite obj_new.favorite) // true3. Ar…

(79)SPI接口--->(004)FPGA实现SPI接口

(004)FPGA实现SPI接口 1 目录 (a)FPGA简介 (b)IC简介 (c)Verilog简介 (d)FPGA实现SPI接口 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为…

Redis源码学习:SDS设计与内存管理

为什么Redis选择SDS 1、缓解C语言字符串的缺陷 在 C 语言中可以使用 char* 字符数组来实现字符串。每个字符串分配一段连续的内存空间&#xff0c;依次存放字符串中的每一个字符&#xff0c;最后以null字符结尾。这种设计存在以下问题&#xff1a; 1、低效的操作 每次获取字…

Linux根目录挂载点(/dev/mapper/centos-root)扩容

如果我们在安装系统是采用自定义分区的话&#xff0c;就可以提前规划好这个事情。但是如果平常没注意就直接采用默认安装的方式的话。一旦 根目录的容量耗尽&#xff0c;将会影响业务的运行。今天我们来扩容逻辑卷。 默认安装的话会给home目录分比较多的空间&#xff0c;我们可…

说一说强、软、弱、虚引用

Java根据其生命周期的长短将引用类型又分为强引用、软引用、弱引用、虚引用。 强引用&#xff1a;就是我们平时 new一个对象的引用。当JVM的内存空间不足时&#xff0c;宁愿抛出OutOfMemoryError使得程序异常终止&#xff0c;也不愿意回收具有强引用的存活着的对象。 软引用&a…

【Leetcode每日一题】 01背包 - DP41 【模板】01背包(难度⭐⭐)(80)

1. 题目解析 题目链接&#xff1a;DP41 【模板】01背包 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 第一问&#xff1a;不超过总体积的背包问题 1. 状态表示 dp[i][j] 表示&#xff1a;从前 i 个物品中挑选&…

汇编语言实验八

目录 一、实验目的 二、实验内容 三&#xff0e;实验步骤以及结果 1、阅读monthtab.asm 程序&#xff0c;要求写出该程序功能&#xff0c;并在实验报告中画出其程序流程图 2.编写一段程序&#xff0c;要求在长度为20的数组&#xff08;无符号数&#xff09;中&#xff0c;…

LabVIEW与C#相互调用dll

C#调用LabVIEW创建的dll 我先讲LabVIEW创建自己的.net类库的方法吧&#xff0c;重点是创建&#xff0c;C#调用的步骤&#xff0c;大家可能都很熟悉了。 1、创建LabVIEW项目&#xff0c;并创建一个简单的add.vi&#xff0c;内容就是abc&#xff0c;各个接线端都正确连接就好。 …

云层之间穿梭特效视频转场PR模板素材

12 个超赞的 Premiere Pro 云层穿梭特效视频转场模板 https://prmuban.com/39056.html &#x1f4fd; 你是否正在寻找一种方法&#xff0c;让你的视频更酷、更时尚、更吸引人&#xff1f;今天推荐的12个逼真的云层穿梭特效视频转场模板&#xff0c;绝对能为你的作品锦上添花 ✨…

服务器雪崩的应对策略之----隔离

隔离&#xff08;Isolation&#xff09;是一种有效的应对服务器雪崩的策略。通过隔离&#xff0c;可以将问题限制在特定的服务或模块中&#xff0c;避免其扩散到整个系统。隔离方法的核心思想是将系统分成多个相对独立的部分&#xff0c;确保某个部分出现问题时不会影响到其他部…

智赢选品,OZON数据分析选品利器丨萌啦OZON数据

在电商行业的激烈竞争中&#xff0c;如何快速准确地把握市场动态、洞察消费者需求、实现精准选品&#xff0c;是每个电商卖家都面临的挑战。而在这个数据驱动的时代&#xff0c;一款强大的数据分析工具无疑是电商卖家们的得力助手。今天&#xff0c;我们就来聊聊这样一款选品利…

我也认为说 360 无法卸载这一说法,是一个 “彻头彻尾的谣言”

最近&#xff0c;360 公司董事长周鸿祎发布视频回应了 360 无法卸载这一说法&#xff0c;称其是一个 “彻头彻尾的谣言”。他解释道&#xff0c;360 软件完全可以卸载&#xff0c;在设置里面有卸载的入口&#xff0c;通过软件管家也可以正常卸载。不能卸载的说法完全是断章取义…