IO——标准IO

news2025/3/12 23:53:26

1.1概念

在这里插入图片描述

标准IO:是在C库中定义的一组专门用于输入输出的函数。

1.2特点

(1)通过缓冲机制减少系统调用,提高效率
(2)围绕流操作,用FILE*描述
(3)标准IO默认打开三个流,stdin,stdout,stderr

1.3缓存区

(1)全缓存,和文件相关
全缓存表示当缓存区填满时才进行写入操作
(2)行缓存,和终端相关
表示当换行时才进行写入操作
(3)不缓存,标准错误,没有缓存,直接输出
刷新标准输出缓存区的条件
(1)程序正常退出
(2)缓存区满
(3)\n,换行操作
(4)强制刷新 fflush(NULL)
例:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    //printf("hello world\n"); //\n不光可以换行,还可以刷新标准输出的缓冲区
    printf("hello world");
    fflush(NULL); //强制刷新缓存区
    while (1);//让程序无法正常结束
    return 0;  //正常退出刷新刷存区
}

标准输出缓存区大小
1kb
在这里插入图片描述
缓存区存了256个int字符,共256*4=1024b=1kb

1.4函数接口

1.4.1打开fopen

FILE* open(const charpath,const charmode)
功能:打开文件
参数:
path:打开的文件路径
mode:打开的方式
r:只读,当文件不存在时报错,文件流定位到文件开头
r+:可读可写,当文件不存在时报错,文件流定位到文件开头
w:只写,文件不存在创建,存在则清空
w+:可读可写,文件不存在创建,存在则清空
a:追加(在末尾写),文件不存在创建,存在追加,文件流定位到文件末尾
a+:读和追加,文件不存在创建,存在追加,读文件流定位到文件开头,写文件流定位到文件末尾
注:当a+的方式打开文件时,写只能在末尾进行追加,定位操作是无法改变写的位置,但是可以改变读的位置
返回值:
成功:文件流
失败:NULL,并且会设置错误码

1.4.2关闭文件fclose

int fclose(FILE* stream);
功能:关闭文件
参数:stream:文件流

#include <stdio.h>

int main(int argc, char const *argv[])
{
    FILE *fp;
    //1.打开文件
    //fp = fopen("test.txt","w");
    fp = fopen("test.txt", "r");
    if (NULL == fp)
    {
        perror("fopen err"); //如果以r方式打开,没有这个文件会报错,打印错误信息。
        return -1;
    }
    printf("fopen success\n");

    //2. 关闭文件
    fclose(fp);

    return 0;
}

1.4.3 文件读写操作

1.4.3.1读写一个字符fgetc() fputc()

每次读一个字符fgetc()
int fgetc(FILE * stream);
功能:从文件中读取一个字符,并将当前文件指针位置向后移动一个字符。
参数:stream:文件流
返回值:成功:读到的字符
失败或读到文件末尾:EOF(-1)
每次写一个字符fputc()
int fputc(int c, FILE * stream);
功能:向文件中写入一个字符, 成功写入后文件指针会自动向后移动一个字节位置。
参数:c:要写的字符
stream:文件流
返回值:成功:写的字符的ASCII
失败:EOF(-1)
针对文件

#include <stdio.h>

int main(int argc, char const *argv[])
{
    FILE *fp;
    //1.打开文件
    fp = fopen("test.txt", "r+");
    //fp = fopen("test.txt", "r");
    if (NULL == fp)
    {
        perror("fopen err"); //如果以r方式打开,没有这个文件会报错,打印错误信息。
        return -1;
    }
    printf("fopen success\n");

    //对文件读写操作
    char ch = fgetc(fp);
    printf("%c %d\n", ch, ch);//h 104

    ch = fgetc(fp);
    printf("%c %d\n", ch, ch);//e 101

    fputc('a', fp);
    fputc(98, fp);

    //2. 关闭文件
    fclose(fp);

    return 0;
}

针对终端

#include <stdio.h>

int main(int argc, char const *argv[])
{
    char ch = fgetc(stdin);
    //printf("%d %c\n", ch, ch);
    fputc(ch, stdout);

    ch = fgetc(stdin);
    //printf("%d %c\n", ch, ch);
    fputc(ch, stdout);

    return 0;
}

补充:feof和ferror
int feof(FILE * stream);
功能:判断文件有没有到结尾,也就是当前所在位置后面还有没有字符。
返回:如果到达文件末尾,返回非零值。如果后面还有字符则返回0。
intferror(FILE * stream);
功能:检测文件有没有出错
返回:文件出错,返回非零值。如果没有出错,返回0。

fp = fopen("test.txt", "w");//权限设置为写
    if (NULL == fp)
    {
        perror("fopen err"); 
        return -1;
    }
    printf("fopen success\n");

    char ch = fgetc(fp); //因为权限是只写,所以读操作有错误。
    if (ferror(fp))
    {
        printf("err!\n");
        return -1;
    }

1.4.3.2读写字符串fgets() fputs()

char * fgets(char *s, int size, FILE * stream);
功能:从文件中每次读取一行字符串
参数: s:存放字符串的地址
size:期望一次读取的字符个数
stream:文件流
返回值:成功:s的地址
失败或读到文件末尾:NULL
特性: 每次实际读取的字符个数为size-1个,会在末尾自动添加\0
每次读一行,遇到\n或者到达文件末尾后不再继续读下一行
并把它存储在s所指向的字符串内。(注意此时s最后两个字符为 \n \0,可以此判断行末)
if(s[strlen(s)-1]==‘\n’)行数+1;

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

注意: fgets输入时最后一定有一个位置给\0

1.4.3.3二进制读取fread() fwrite()

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件流读取多个元素(将二进制数据从文件读出)
参数: ptr :是一个指针,是存放数据的存储空间的起始地址,用来存放读取元素
size :元素大小 sizeof(元素数据类型)
nmemb :读取元素的个数
stream :要读取的文件流
返回值:成功:读取的元素的个数
读到文件尾或失败: 0

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
FILE *stream);
功能:将二进制数据写入文件
参数: ptr :是一个指针,保存要输出数据的空间的地址。
size :要写入的字节数 sizeof(数据类型)
nmemb : 要进行写入元素的个数
strem: 目标文件流指针
返回值:成功:写的元素个数
失败 :-1

1.4.4其他操作

1.4.4.1重定向freopen()

FILE * freopen(const char *pathname,  const char *mode,  FILE* fp);
功能:将指定的文件流重定向到打开的文件中
参数:path:文件路径
     mode:打开文件的方式(同fopen)
     fp:文件流指针
返回值:成功:返回文件流指针
      失败:NULL
      
#include <stdio.h>
//例子
int main(int argc, char const *argv[])
{
    printf("hello\n");
    //将标准输出重定向到打开的test.txt中
    freopen("test.txt", "w+", stdout);
    printf("world\n");

    //将标准输出流重定向到终端文件/dev/tty
    freopen("/dev/tty", "r+", stdout);
    printf("66666\n");

    return 0;
}

1.4.4.2定位操作rwind() fseek() ftell()

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

int fseek(FILE *stream, long offset, int whence);
功能:文件的定位操作
参数:stream:文件流
     offset:偏移量:正数表示向后文件尾部偏移,负数表示向文件开头偏移
     whence:相对位置:
           SEEK_SET:相对于文件开头
           SEEK_CUR:相对于文件当前位置
           SEEK_END:相对于文件末尾
返回值:成功:0
       失败:-1 
注:当打开文件的方式为a或a+时,fseek不起作用    
补充:其中SEEK_SET,SEEK_CURSEEK_END和依次为012.
例子:
把fp指针移动到离文件开头100字节处:fseek(fp,100,0);
把fp指针移动到离文件当前位置100字节处:fseek(fp,100,1);
把fp指针退回到离文件结尾100字节处: fseek(fp,-100,2);

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

总结:

  1. 为什么用标准IO?
    因为读写文件通常是大量的数据(相对于底层驱动的系统调用所实现的数据操作单位),这时,使用库函数可以大大减少系统调用的次数。
  2. 为了保证可移植性

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

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

相关文章

HTML常见标签的使用

文章目录 1. **文档结构标签**2. **文本内容标签**3. **图像标签**4. **链接标签**5. **列表标签**6. **表格标签**7. **表单标签**8. **其他常用标签**9. **注释标签** 案例展示 网页结构层主要通过HTML&#xff08;HyperText Markup Language&#xff09;标签来构建&#xff…

它山之石可以攻玉,大师摄影作品鉴赏

一、资料描述 本套大师摄影作品&#xff0c;大小685.08M&#xff0c;共有19个文件。 二、资料目录 Bill.Brandt.(比尔布兰德).rar Bourk White(伯克怀特).rar Bresson(布列松).rar Edward Weston(爱德华韦斯顿).rar Herb Ritts(赫伯瑞茨).rar Richard Avedon(阿威顿).r…

超像素分割在AI去衣技术中的应用与探讨

随着人工智能技术的飞速发展&#xff0c;图像处理领域不断涌现出新的方法和应用。其中&#xff0c;超像素分割作为一种重要的图像预处理技术&#xff0c;在AI去衣这一特定应用中发挥着至关重要的作用。本文将深入探讨超像素分割在AI去衣技术中的应用&#xff0c;并尝试从专业的…

基于SpringBoot+Vue的在线教育系统(源码+文档+包运行)

一.系统概述 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了在线教育系统的开发全过程。通过分析在线教育系统管理的不足&#xff0c;创建了一个计算机管理在线教育系统的方案。文章介绍了在线教育系统的系统分析部…

人工智能ai帮助我们做什么?

最近有去使用人工智能画图&#xff0c;做文案&#xff0c;写代码&#xff0c;优化代码&#xff0c;确实很好用。 人工智能可以为我们做什么 1&#xff0c;自动化任务&#xff1a;人工智能可以自动执行重复性任务&#xff0c;从而节省时间和精力。 2&#xff0c;数据分析&…

自然语言处理——情绪检测数据集

一、重要性及意义 情绪检测的重要性和意义体现在多个方面&#xff0c;不仅对于个人日常生活有深远影响&#xff0c;也在多个行业和领域中扮演着关键角色。以下是情绪检测的重要性和意义的具体体现&#xff1a; 提高人机交互体验&#xff1a; 在人工智能和机器学习驱动的系统中…

高效求解最长回文子序列:动态规划方法与C语言实现

高效求解最长回文子序列&#xff1a;动态规划方法与C语言实现 问题描述解决方案伪代码C代码示例算法分析进一步讨论 在计算机科学中&#xff0c;回文是一种有趣的字符串&#xff0c;它在正序和逆序下是相同的。例如&#xff0c;“civic”、"racecar"和"aibohpho…

JAVA基础面试题(第九篇)中! 集合与数据结构

JAVA集合和数据结构也是面试常考的点&#xff0c;内容也是比较多。 在看之前希望各位如果方便可以点赞收藏&#xff0c;给我点个关注&#xff0c;创作不易&#xff01; JAVA集合 11. HashMap 中 key 的存储索引是怎么计算的&#xff1f; 首先根据key的值计算出hashcode的值…

【安装部署】Apache SeaTunnel 和 Web快速安装详解

版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0&#xff0c;不兼容2.3.4&#xff0c;因此这里仍然使用2.3.3版本。 可以自定义兼容处理&#xff0c;官方提供了文档&#xff1a;https://mp.weixin.qq.com/s/Al1VmBoOKu2P02sBOTB6DQ 因为大部分用…

棱镜七彩上榜《中国网络安全行业全景图》软件成分分析领域

近日&#xff0c;安全牛第十一版《中国网络安全行业全景图》&#xff08;以下简称“全景图”&#xff09;正式发布。棱镜七彩凭借专业技术实力和创新能力上榜全景图软件供应链安全-软件成分分析领域。 据悉&#xff0c;本次第十一版全景图优先展现当前热门网络安全领域中具有较…

飞企互联FE业务协作平台 ProxyServletUti 任意文件读取漏洞复现

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外,支持企业B2B、C2B与O2O等核心需求,为不同行业客户的互联网+转型提供支持。其特色在于提供云端工作环境,整合…

GLIB: The Main Event Loop

主事件循环机制&#xff08;MEL&#xff1a;the Main Event Loop)在GLib和GTK应用中管理可用的事件源。事件源的类型包括&#xff1a;文件描述符&#xff08;管道、套接字和常规文件&#xff09;和定时器超时。 guint g_source_attach (GSource* source, GMainContext* contex…

java的深入探究JVM之内存结构

前言 Java作为一种平台无关性的语言&#xff0c;其主要依靠于Java虚拟机——JVM&#xff0c;我们写好的代码会被编译成class文件&#xff0c;再由JVM进行加载、解析、执行&#xff0c;而JVM有统一的规范&#xff0c;所以我们不需要像C那样需要程序员自己关注平台&#xff0c;大…

软件开发安全设计方案

2.1.应用系统架构安全设计要求 2.2.应用系统软件功能安全设计要求 2.3.应用系统存储安全设计要求 2.4.应用系统通讯安全设计要求 2.5.应用系统数据库安全设计要求 2.6.应用系统数据安全设计要求 软件开发全资料获取&#xff1a;软件开发全套资料_软件开发资料-CSDN博客https://…

server_id 引发的 MySQL 级联复制同步异常

MySQL 级联复制的坑&#xff0c;我帮你们踩了。 作者&#xff1a;蒋士峰&#xff0c;爱可生 DBA 团队成员&#xff0c;熟悉 MySQL&#xff0c;Oracle 等数据库。每天的积累&#xff0c;时间久了&#xff0c;会带来不一样的收货。 爱可生开源社区出品&#xff0c;原创内容未经授…

SOLIDWORKS 2024教育版全套多少钱?

SOLIDWORKS 2024教育版全套是一款专为教育机构和学生设计的3D CAD设计软件套装。它集合了SOLIDWORKS的核心功能和工具&#xff0c;旨在帮助学生在学习和实践过程中掌握先进的工程设计和制造技术。对于教育机构和学生而言&#xff0c;了解SOLIDWORKS 2024教育版全套的价格成为了…

[lesson35]函数对象分析

函数对象分析 客户需求 编写一个函数 函数可以获得斐波那契数列每项的值每调用一次返回一个值函数可根据需要重复使用 存在的问题 函数一旦开始调用就无法重来 静态局部变量处于函数内部&#xff0c;外界无法改变函数为全局函数&#xff0c;是唯一的&#xff0c;无法多次独…

【系统分析师】系统安全分析与设计

文章目录 1、安全基础技术1.1 密码相关1.1.1对称加密1.1.2非对称加密1.1.3信息摘要1.1.4数字签名1.1.5数字信封 1.2 PKI公钥体系 2、信息系统安全2.1 保障层次2.2 网络安全2.2.1WIFI2.2.2 网络威胁与攻击2.2.3 安全保护等级 2.3计算机病毒与木马2.4安全防范体系 1、安全基础技术…

Linux下kafka单机版搭建

1.zookeeper的安装 这里使用3.6.4版本 前提&#xff1a;服务器已经安装了jdk&#xff0c;zookeeper运行需要jdk环境 1.1创建放zookeeper的目录 #创建目录 mkdir -p /usr/local/zookeeper#赋予权限 chmod 777 /usr/local/zookeeper1.2安装包的下载 #这里推荐去官网下载 https:…

宝塔使用笔记

1.配置ssl 验证方式&#xff1a;文件验证和dns验证都试一下 参考&#xff1a; https://app.applebyme.cn/cloud/https/23050.html