IO的详细介绍

目录

前言:io是啥?为什么要去学习它?

IO的分类

1、标准IO(高级磁盘IO)

2、文件IO(低级磁盘IO)

标准IO与文件IO的区别

系统调用和缓冲机制

标准IO

1、流

2、流的分类

3、缓冲机制

全缓冲

行缓冲

不带缓冲

4、文件操作

1、按照字符操作

2、按照行操作

3、按照块操作

文件IO

1、打开文件

2、关闭文件

3、写文件

4、读文件

操作目录 

操作目录流程流程:

opendir   readdir   closedir

1、打开目录

2、操作目录 

3、关闭目录 

4、测试文件属性 

了解静态库与动态库的创建 

1、创建静态库

2、创建动态库


前言:io是啥?为什么要去学习它?

IO是输入input输出output的首字母缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动;另外,对于一次IO,它究竟是输入还是输出,是针对不同的主体而言的,不同的主体有不同的描述。例如,甲乙两人交谈,甲将大脑中的想法通过声带震动,继而通过声波传入乙的耳朵,乙通过耳膜的震动再由神经将信号解析到大脑,这个数据流动的过程对甲而言是输出,对乙而言是输入。

因此,理解IO一定要弄清楚所要研究的本体。

学习的目的就是为了将数据存储以及对于文件的操作。

IO的分类

1、标准IO(高级磁盘IO)

2、文件IO(低级磁盘IO)

标准IO与文件IO的区别

文件I/O 又称为低级磁盘I/O,遵循POSIX相关标准。任何兼容POSIX标准的操作系统上都支持文件I/O。标准I/O被称为高级磁盘I/O,遵循ANSI C相关标准。只要开发环境中有标准I/O库,标准I/O就可以使用。(Linux 中使用的是GLIBC,它是标准C库的超集。不仅包含ANSI C中定义的函数,还包括POSIX标准中定义的函数。因此,Linux 下既可以使用标准I/O,也可以使用文件I/O)。

      通过文件I/O读写文件时,每次操作都会执行相关系统调用。这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销,标准I/O可以看成是在文件I/O的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。

      文件I/O中用文件描述符表现一个打开的文件,可以访问不同类型的文件如普通文件、设备文件和管道文件等。而标准I/O中用FILE(流)表示一个打开的文件,通常只用来访问普通文件。

系统调用和缓冲机制

 

注意:

     库函数和系统调用函数的关系:大对数库函数都是由系统调用函数封装起来的

标准IO

标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存。

(1)全缓存:当填满标准I/O缓存后才进行实际的I/O操作。 
(2)行缓存:当输入或输出中遇到新行符时,标准I/O库执行I/O操作。 
(3)不带缓存:stderr就是了。

1、流

文件被打开时,创建的结构体名为FILE的结构体指针,形象的称为“流”。

存在三个特点:

  1. 有源头:APP
  2. 有目的:缓冲区
  3. 持续性:不断放入数据到缓冲区

一旦具备以上3个特点,就会形成流,所以通过文件指针操作文件可以理解为是通过操作流来操作文件。

2、流的分类

第一类:stdin(标准输入--》键盘)。

第二类: stdout(标准输出-》终端)。

第三类:stderr(标准出错--》会向终端打印,不带缓冲区意味着每一次出错就会立即刷新缓冲区))。

3、缓冲机制

全缓冲

     缓冲区被放满,程序结束,强制刷新--》会引起缓冲区的刷新

行缓冲

     缓冲区被放满,程序结束,强制刷新,遇到换行符--》会引起缓冲区的刷新

不带缓冲

     不存在缓冲区的概念---《每一次读写都是直接输出:stderr》

4、文件操作

有三种,但是不管哪一种都会1、打开文件,2、读写文件,3、关闭文件这三种。

1、按照字符操作

函数名:fgetc()    fputc()

头文件:#include <stdio.h>

函数原型:int fgetc(FILE *stream);

功能:从指定的文件流中获取一个字符

参数:指定获取一个字符所处文件的文件流

返回值:1、 成功返回获取到的字符值2、 读取到文件末尾返回EOF(-1)3、操作中失败返回负数。

int fputc(int c, FILE*stream);

功能:向指定的文件流中输出一个字符

参数1:需要输出的指定字符(字符被称为单字节的整形)

参数2:指定输出字符到的文件对应的文件流

返回值:成功返回刚写入的字符值,失败返回EOF(-1)

案例:实现对于指定一个文件读取,读取方式为按照字符操作,将读取完毕之后的结果显示在终端上。(自己实现命令cat 文件名)

思路:

  1. 打开需要显示文件内容所在的文件
  2. 获取一个字符
  3. 输出一个字符
  4. 重复2.3直至文件末尾截止
  5. 关闭文件

2、按照行操作

标志:寻找’\n’

函数: fgets   fputs

函数原型:char * fgets(char *s, int size, FILE *stream);

参数1:  即将存储内存空间首地址

参数2: 存储内容空间的大小(可以sizeof()测得)

参数3: 指定的文件流

返回值:成功返回存储内容空间首地址,失败返回NULL

思考:fgets什么时候会返回?

情况1:第一次遇到’\n’就会返回

情况2:该行会比较长,需要多次读取才能读完,所以位于读到’\n’之前的多次都是读取到size-1就返回。

3、按照块操作

函数:fread()    fwrite()

函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数1:存储读取一块内容之后的空间地址

参数2:块的大小---》建议给1

参数3:块的个数---》建议给sizeof()

参数4:要读取的文件对应的文件流

返回值:成功代表读取的块的个数,失败返回0

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

参数1:需要写入的内容的空间地址

参数2:块的大小---》建议给1

参数3:块的个数---》建议给sizeof()

参数4:要写入的文件对应的文件流

返回值:成功代表写入的块的个数,失败返回0

文件IO

文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。

文件IO主要就四个:open   close   read   write

头文件:

       #include <sys/types.h>

       #include <sys/stat.h>

       #include <fcntl.h>

1、打开文件

函数原型:int open(const char *pathname, int flags);

功能:打开指定的文件

参数1:所需打开文件的名字(包含路径)

参数2:打开文件的方式---》主标志 | 副标志

返回值:成功代表一个大于0 的数字(文件描述符),失败返回-1(errno ie set...)int open(const char *pathname, int flags, mode_t mode);

功能:打开指定的文件

参数1:所需打开文件的名字(包含路径)

参数2:打开文件的方式---》主标志 | 副标志

参数3:当需要O_CREAT时,就要写该参数来为创建的新文件指明权限(八进制表示)

 返回值:成功代表一个大于0 的数字(文件描述符),失败返回-1(errno ie set...)

2、关闭文件

#include <unistd.h>
int close(int fd);

功能:关闭一个文件描述符

参数:打开文件成功之后的文件描述符

3、写文件

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

功能:向指定的文件描述符的文件内写入内容

参数1:打开文件之后的文件描述符

参数2:所需写入的内容所在空间首地址

参数3:需要写入的字节数

返回值:成功返回写入的字节数,返回0代表没有写入任何内容,返回-1代表出错(errno is set...)

4、读文件

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

功能:从指定的文件描述符的文件中读取内容

参数1:打开文件之后的文件描述符

参数2:存储读取到结果的空间首地址

参数3:可以读取的字节数---》sizeof测得

返回值:成功返回读取的字节数,返回0代表读取完毕,返回-1代表出错(errno is set...)

操作目录 

操作目录流程流程:

opendir   readdir   closedir

1、打开目录

2、操作目录 

 

3、关闭目录 

4、测试文件属性 

 

了解静态库与动态库的创建 

1、创建静态库

2、创建动态库

 

 

lhd_lhd_lhd
关注 关注
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
到底什么是IO
不要让任何事情成为你不去学习的理由。
02-18 6940
IO 分为本地IO和网络IO IO 分类 BIO/NIO/AIO
Linux 下的五种 IO 模型详细介绍
09-15
### Linux 下的五种 IO 模型详细介绍 #### 一、概述 在深入探讨Linux下的五种IO模型之前,我们先来了解一些基础概念。在Linux操作系统中,进程与内核之间的交互非常重要,特别是涉及到输入输出(IO)操作时更是...
Java IO
weixin_34124939的博客
09-10 985
一、java io 概述 1.1 相关概念 Java IO Java IO即Java 输入输出系统。不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二...
C语言IO详解
最新发布
weixin_58602623的博客
07-16 500
C语言之这样的IO,你知道吗?
java IO
傲慢的上校的专栏
09-30 4371
以下资料,大部分为自己整理而来,供学习之用!一、什么是流       首先什么是流:流(Stream)的概念来源于UNIX中的管道(pipe)概念,在unix中,管道是一条不间断的字节流,用来实现程序和进程间的通信,或者读写外围设备、外部文件等。流,必须有源端和目的端,可以是文件,内存或者网络等。流的创建是为了更方便的处理数据的输入输出。       其次,对于输入流输出流如何区分,相信有很多人闹
IO详解(一)
Addison
09-23 542
最近开始刷书,整理知识点连载... 常见的IO模型有4中,对此总结如下 1.同步阻塞IO(Blocking IO) 阻塞IO,指需要内核IO操作彻底完成后,才返回到用户空间执行用户的操作。阻塞的是用户空间执行的状态。 传统IO模型都是同步阻塞IO,在java里默认的socket都是阻塞的。 同步IO,是一种用户空间与内核空间的IO发起方式。同步IO是指用户空间的线...
Java IO最详解,欢迎提出意见
DavidIsOK
08-20 5561
Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见。 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!)   这是java io 比较基本的一些处理流,除此之外我们还会...
IO体系详解
编码日常
07-02 822
IO体系表如下: 表中蓝底部分为开发中常用类,访问文件也称为节点流或者文件流;它们的关系如下: 1、字符流(FileReader和FileWrite)-处理文本文件。使用实例代码如下: public void fileReader() { //1 提供具体的流 FileReader fileReader = null; try { //2 实例化File对象 ...
IO模型介绍
02-21
接下来,我们将详细介绍五种基本的IO模型,这些模型是理解和设计高性能网络应用程序的基础。 1. **阻塞IO**:这是最简单的IO模型。在读写操作发生时,调用线程会被阻塞直到操作完成。阻塞IO简单易懂但效率较低,...
MSP430-IO端口介绍
07-23
通过对MSP430端口及其控制寄存器的详细介绍,我们可以看到MSP430单片机提供了非常灵活和强大的I/O控制能力。通过合理配置这些寄存器,开发人员可以轻松实现复杂的输入/输出操作,满足各种嵌入式系统的实际需求。此外...
IO模型介绍,理解java常见的IO模型
07-02
本文将详细介绍这些模型的特点及其应用场景。 #### 二、BIO(Blocking IO) ##### 2.1 定义与特点 - **定义**:BIO是一种基于流的阻塞IO模型。 - **特点**: - 每个客户端连接需要一个独立的线程来处理。 - ...
IO概念介绍
learning_559的博客
01-27 2058
原博链接 概念 1、IO 即Input和output的缩写,是对数据的流入和流出的一种抽象。 2、什么是流 从水流、物流、人流可以总结出流的特点:动态的、可转移的,从一处到另一处的。 3、java中io java为了我们调用方便,而屏蔽输入/输出源和流动细节,抽象出的用于解决数据流动问题的类体系。 4、输入流和输出流 用于读取的流就是输入流,用于写入的流就是输出流。 输入输出的概念一般是针对内存来说的,写入内存(输出流),从内存中读(输入流)。 5、字节流和字符流 输入输出流可操作性的最小单位是字节
java中的io详解_java io详解
weixin_34561373的博客
02-12 180
(5)FilterReader允许过滤字符流protectedfilterReader(Readerr);(6)BufferReader接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。PublicBufferReader(Readerr);Writer类体系结构(1)FileWrite将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。...
IO介绍
vigir的博客
02-23 380
I/OI/O核心类核心方法 InputStream;int read(byte[]b, int off, int len) (存储数组,偏移量,最多读取字节数) OutputStream;void write(byte[]b, int off, int len) 代码示例: //声明输入流的引用 FileInputStream fis = null; FileOutpu
io介绍
只要今天比昨天好
08-25 122
 1.做java开发有一段时间了,对java的io类库总是没有较全面的了解,仅仅停留在会使用几个常用api的基础   上。抽空学习了一下,对io类库有了更全面的了解。  2.IO:输入输出,java中使用流的抽象概念来表示。  3.从操作的基本单元的类型划分:可分为面向字节操作的IO和面向字符操作的IO。    3.1.在面向字节操作的IO中,api的设计者认为有关输入的类都继承自Inpu...
Java IO流学习
weixin_34054866的博客
12-04 363
Java IO流学习   Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。   在IO中涉及的设备文件包括文件、控制台、网络链接等,这其中又根据流的方向可以将两端的设备文件分为数据...
IO详解
qq_39027486的博客
08-20 189
IO详解io流基本信息按照数据类型分类:字节输出流 OutputStream的方法:构造方法:普通方法**文件追加**output的异常处理 io流基本信息 IO流的概述: 本质就是 用来处理 数据的传输 IO流的分类 按照流向分: 输入流: 从外界到内存 输出流: 从内存到外界 按照数据类型分类: 字节流: 二进制文件 (视频 音频 图片) 字符流: 文本文件 (html css js t...
IO详细介绍
qq_41908912的博客
02-05 758
几个概念先理解: 1.阻塞(Block)和非阻塞(Non-Block): 阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。 非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经 准备好,也直接返回。 2.同步和异步 同步和异步都是基于应用程序和操作系统处理 IO 事件所采用的方式。比如同步:是应用程序要直接参...
数据IO
weixin_30740581的博客
07-03 124
实验报告六 实验目的: 1.掌握文件输入\输出流的使用方法。 2.掌握带缓存的输入\输出流的使用方法。 实验内容和原理: 文件输出流的应用。 定义如下字符串: String str = “12345abcdef@#%&*软件工程”; 编写程序将该字符串写入文件”data.txt”。 文件输入流的应用。 修改第1题中的程序,读文件”data.txt”,将读到的数据输出在控制台。 ...
详细介绍一下java.io
04-28
Java.io是Java编程语言中用于进行输入/输出(I/O)操作的标准库。它提供了大量的类和接口,用于读取和写入各种类型的数据,包括文件、网络连接、内存缓冲区等。Java.io库中的类和接口可以分为以下几个主要类别: 1. 字符流类:用于读取和写入文本数据,包括Reader、Writer、BufferedReader、BufferedWriter等。 2. 字节流类:用于读取和写入二进制数据,包括InputStream、OutputStream、FileInputStream、FileOutputStream等。 3. 文件类:用于操作文件和目录,包括File、FilenameFilter、FileReader、FileWriter等。 4. 网络类:用于进行网络通信,包括Socket、ServerSocket、DatagramPacket、DatagramSocket等。 5. 对象序列化类:用于将对象转换成字节序列,包括ObjectInputStream、ObjectOutputStream等。 Java.io库提供了丰富的API,可以满足各种不同的I/O需求,同时也支持自定义I/O操作。
写文章

热门文章

  • IO的详细介绍 2625
  • linuxC 642
  • 数据结构基本介绍 520
  • C语言汇总 186

最新评论

  • linuxC

    CSDN-Ada助手: 非常感谢您分享这篇关于Linux系统和C高级知识的博客!您的文章对于想要深入了解Linux和C语言的读者来说一定非常有用。除了您提到的知识点外,还有一些扩展知识和技能,如网络编程、多线程编程、数据结构与算法等都是和Linux和C语言相关的重要内容,希望您也可以分享您在这些领域的学习和实践经验,让更多的读者受益。同时也希望您能够继续更新博客,分享更多的经验和知识,让我们共同进步。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦!

  • 数据结构基本介绍

    CSDN-Ada助手: 非常感谢您对数据结构的介绍,这篇博客让我对数据结构有了更深入的了解。恭喜您写了第四篇博客,您的持续创作精神值得表扬。接下来,我建议您可以在此基础上进一步深入探讨数据结构的实际应用和优化策略,期待您的更多优秀文章。 CSDN 会根据你创作的前四篇博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply4 看奖励名单。

  • IO的详细介绍

    CSDN-Ada助手: 恭喜您写了又一篇博客!看到标题是“IO的详细介绍”,我很期待能够了解更多关于IO的知识。同时,我也想建议您在未来的创作中可以多探索一些新的主题或视角,这样能够更加丰富您的博客内容,吸引更多读者。再次祝贺您,期待您的下一篇博客! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3

  • C语言汇总

    CSDN-Ada助手: 推荐 C 技能树:https://edu.csdn.net/skill/c?utm_source=AI_act_c

最新文章

  • 数据结构基本介绍
  • linuxC
  • C语言汇总
2023年4篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王优化企业网站广东网站竞价优化公司介绍张家口网站优化联系方式绍兴网站关键词优化价格吴中网站优化推广方法枣庄泰安网站优化费用公司武汉网站怎么优化上海网站优化选哪家德惠网站关键词优化长沙优化网站排名一站式服务灵宝企业网站排名优化安顺网站优化与推广深圳网站优化系统潍坊网站seo优化推广报价广州网站的优化沁阳外贸网站优化联系方式seo优化网站更好地服务用户金华网站优化单价通辽网站优化哪家好成都网站优化服务优化网站排名询问u火18星马尾区企业网站优化内黄县网站优化技巧张店淄博网站建设优化公司兰州网站优化网站排名优化都选j火11星郑州优化网站 优帮云坂田网站优化邢台手机网站优化价格海安网站优化有哪些香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化