Day 30 标准IO

这篇具有很好参考价值的文章主要介绍了Day 30 标准IO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是标准IO

1.1 概念

标准IO:在c库中定义的一组专门用于输入输出的函数
Day 30 标准IO,华清远见培训,c语言

1.2 特点

(1)通过缓冲机制减少系统调用,提高效率
系统调用:内核向上(用户)提供的一组接口
例如:从硬盘读1kb数据每次只能读1b
Day 30 标准IO,华清远见培训,c语言
若将数据先存入缓存区则可以减少硬件到用户层的调用次数

(2)围绕着流(stream)进行操作,流用FILE*来描述
注意: vi用ctags索引使用:
1)vi -t 查找名称
输入前面序号,回车。
2)继续追踪:
将光标定位到要追踪的内容,ctrl+]
回退:ctrl+t
3)跳转到上次位置:ctrl+o
跳转到下次位置:ctrl+i
(3) 标准IO默认打开三个流,sdtin(标准输入)、stdout(标准输出)、stderr(标准错误)

1.3 操作

打开文件:fopen
关闭文件: fclose
读写操作:fgetc、fputc、fgets、fputs、fread、fwrite
其他:freopen、rewind、fseek

2.缓存区

(1)全缓存:和文件相关的
(2)行缓存:和终端相关
刷新缓存区
条件一:\n(换行)
条件二:程序退出
条件三:fflush(NULL)(强制刷新所有缓存区) fflush(stdout)(刷新输出缓存区)
条件四:缓存区满
(3)不缓存,没有缓存,标准错误。
综上:当我们每次要打印数据时,并不是将数据直接发送给标准输出设备,也就是并直接发送给显示器,而是将要打印的数据先存放到缓存区,当缓冲存数据满时,或者遇到\n,或者程序结束时,或者手动刷新缓存区时,缓冲区才会把数据传输到标准输出设备中,也就是显示器中进行输出。

练习:计算标准输出缓存区大小 KB

方法一:利用循环打印展示
Day 30 标准IO,华清远见培训,c语言
方法二:利用结构体指针 stdout (流指针FILE*类型)

#include<stdio.h>

int main(int argc, char const *argv[])
{
    printf("buf:"); //不进行输出的话缓存区不会开辟,所以要先加一句打印为了让标准IO开辟输出缓存区。
    printf("%d\n",stdout->_IO_buf_end - stdout->_IO_buf_base);
    return 0;
}

得到1024B

3.函数接口

3.1 打开文件fopen

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

3.2 关闭文件 fclose

#include <stdio.h>

int main(int argc, char const *argv[])
{
    FILE *fp;
    //1.打开文件
    fp = fopen("test.c", "r");
    if (NULL == fp)
    {
        perror("fopen err");
        //while(1);//标准错误是不缓存,所以会直接显示到终端
        return -1;
    }
    printf("fopen success\n");
    //2. 关闭文件
    fclose(fp);
    return 0;
}

3.3 读写文件操作

3.3.1 每次读写一个字符:fgetc()、fputc()

每次读一个字符fgetc()

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

每次写一个字符fputc()

int fputc(int c, FILE *stream);
功能:向文件中写入一个字符, 成功写入后文件指针会自动向后移动一个字节位置。
参数:c:要写的字符
stream:文件流
返回值:成功:写的字符的ASCII
失败:EOF(-1)

(1)针对文件

fgetc(fp)
fputc(‘字符’,fp)(注意修改权限)

(2)针对终端

fgetc(stdin)
fpuc(‘字符’,stdout)

feof和ferror

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

int ferror(FILE * stream);
功能:检测文件有没有出错
返回:文件出错,返回非零值。如果没有出错,返回0。

3.3.2 每次一串字符的读写fgets()和fputs()

char * fgets(char *s, int size, FILE * stream);

功能:从文件中每次读取一行字符串

参数:
s:存放字符串的地址
size:一次读取的字符个数
stream:文件流

返回值:
成功:s的地址
失败或读到文件末尾:NULL

特性: 每次实际读取的字符个数为size-1个,会在末尾自动添加\0
每次读一行,遇到\n或者到达文件末尾后不再继续读下一行
并把它存储在s所指向的字符串内。
如果到达末尾则返回NULL,继续输出的还是上一次buf中保留的内容。

int fputs(const char *s, FILE *stream);

功能:向文件中写字符串
参数:s:要写的内容
stream:文件流
返回值:成功:非负整数
失败:EOF

(1)针对终端

char buf[32]=“”;
fgets(buf,sizeof(buf),stdin);
printf(“buf:%s\n”,buf);

(2)针对文件

char buf[32]=“”;
fgets(buf,sizeof(buf),fp);

fputs(buf,fp);

3.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 : 要进行写入元素的个数
stream: 目标文件流指针
返回值:成功:写的元素个数
失败 :-1
文件定位操作:rewind(FILE *fp);文章来源地址https://www.toymoban.com/news/detail-834324.html

到了这里,关于Day 30 标准IO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华清远见嵌入式学习——ARM——作业2

    目录 作业要求: 现象: 代码: 思维导图: 模拟面试题: GPIO实验——3颗LED灯的流水灯实现

    2024年02月03日
    浏览(42)
  • 华清远见作业第四十天——Qt(第二天)

    使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为\\\"admin\\\",密码是否为\\\"123456\\\",如果账号密码匹配成功,则输出“登录成

    2024年02月22日
    浏览(39)
  • 【C语言趣味教程】(8) 标准 IO 流:输入和输出 | 标准输入 stdin | 标准输出 stdout | 详解 printf 和 scanf | 探讨 scanf 缓冲区问题和安全性问题

        🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 引入:I/O 的概念 计算机中的输入和输出,简称 ,其中:  代表 Input,即输入。

    2024年02月09日
    浏览(49)
  • <网络安全>《30 常用安全标准》

    o《信息安全技术 个人信息安全规范》(GB/T35273-2017) o《信息安全技术 个人信息去标识化指南》(GB/T37964-2019) o《信息安全技术 工业控制系统安全检查指南》(GB/T 37980-2019) o《信息安全技术 工业空制系统产品信息安全通用评估准则》(GB/T37962-2019) o《信息安全技术 工业控制系

    2024年02月20日
    浏览(42)
  • Golang标准库——io

    原文:Golang标准库——io io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操

    2024年02月07日
    浏览(32)
  • 七、标准IO和管道

    七、标准IO和管道 重定向I/O,为什么要进行重定向?可以帮我们解决什么问题? 使用管道符连接命令 1、I/O输入输出 显示器是Linux系统中创建默认的输出设备 I/O:input和output 重定向:将原本标准设备,替换为我们想要的内容 目的: 在shell脚本中对脚本输出的内容进行处理,

    2024年02月05日
    浏览(58)
  • 标准IO函数练习

    一、使用fgets实现计算一个文件有几行 二、用fread和fwrite实现文件拷贝

    2024年02月15日
    浏览(24)
  • 标准IO

     标准IO是库函数 是系统调用的封装 文件流:         1.具有方向性(读写)         2.具有连续性         3.具有顺序性 1.1 fopen FILE *fp = NULL; fp = fopen(\\\"m.txt\\\",\\\"r\\\");                  (\\\"要打开的文件名(以字符形式,所以要带引号)\\\", \\\"r/r+/w/w+/a/a+(也要带引号)\\\"); 成功返回   打开

    2024年02月21日
    浏览(30)
  • FPGA中IO电平标准

    FPGA(现场可编程门阵列)的IO电平标准涉及到其输入和输出引脚的电压电平范围,以确保与其他器件和系统的互操作性。这些标准通常由行业组织(如JEDEC、IEEE等)制定,以确保设备之间的电气兼容性和稳定性。 以下是一些常见的FPGA IO电平标准: LVCMOS(低压差分CMOS) :这

    2024年02月06日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包