首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux【模拟实现C语言文件

---- 前言 在 C语言 的文件中,存在一个 FILE 结构体类型,其中包含了文件的诸多读写信息以及重要的文件描述符 fd,在此类型之上,诞生了 C语言 文件相关操作,如 fopen、fclose、...fwrite 等,这些函数本质上都是对系统调用的封装,因此我们可以根据系统调用和缓冲区相关知识,模拟实现出一个简单的 C语言 文件 本文重点 : 模拟实现 FILE 及 C语言 文件操作相关函数 注意...,实际要进行至少三次的拷贝:用户->用户级缓冲区->内核级缓冲区->文件,C语言 中众多文件操作都是在完成 用户->用户级缓冲区 的这一次拷贝动作,其他语言也是如此,最终都是通过系统调用将数据冲刷到磁盘...基础IO【软硬链接与动静态库】》 当然也可以将 myStdio 打包为静态库使用,比较简单,这里不再演示 ---- 11、源码 关于 myStdio 的源码可以点击下方链接进行获取 模拟实现C语言文件...---- 总结 以上就是本次关于 Linux【模拟实现C语言文件】的全部内容了,通过 系统调用+缓冲区,我们模拟实现了一个简单版的 myStdio 库,在模拟实现过程中势必会遇到很多问题,而这些问题都能帮助你更好的理解缓冲区的本质

19410
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核编程--文件与缓冲区

Linux系统下,通过编程对文件进行操作的方式有两种机制:文件描述符和文件 1.文件描述符和文件的区别: 文件描述符的类型为int,文件的类型为FILE*(文件指针)。...文件描述符的操作更底层,文件的操作更高级且更丰富。...文件是基于文件描述符来实现的,所以可以从文件中提取并操作文件描述符,比如“int fileno(FILE*); fileno(file_stream)”。...2.文件的定向设置 文件的定向决定了一个I/O操作一次能操作多少个字节,是单字节(字节定向)还是多字节(宽定向)。...;若的字节定向,返回负数;若是未定向的,返回0 mode为负数,fwide将指定文件可以进行单字节I/O操作(字节定向) mode为正数,fwide将指定文件可以进行多字节I/O操作(宽定向)

2.8K10

文件文件

文件文件 1....文件 文件的分类: 根据功能分为:输入流(读取文件) 和 输出(写入文件) 根据操作内容:字符(读取字符数组) 和 字节流(读取字节数组) 字节输入流,字节输出,字符输入流,字符输出...=-1); //文件是必须要关闭的(像水管子一样) is.close(); 利用字节输出实现文件的写入 //利用字节输出实现文件内容的写入(OutputStream 接口的FileOutputStream...(info.getBytes()); //写入完毕后,关闭 os.flush(); //清空缓存区 os.close(); } 利用字节输入流和字节输出实现文件的拷贝 //利用字节输入输入输出...(只能读取字符文件的信息) //使用字符读取文件 public static void testReader() throws Exception{ //创建文件对象 File file =

2.9K20

Linux文本

在/dev目录下,就可以找到很多这样代表硬件的文件。 但托瓦兹对“万物皆文件”的说法作出过纠正,改为“万物皆文本”(Everything is a stream of bytes")。...有的时候,数据需要搬个家,转移到另一个文件。在这样跑来跑去的过程中,数据像是排着队走路的人流,我们叫它文本(text stream,或者byte stream)。...有了“”,无论是从内存到外设,还是从内存到文件,所有的数据公路都是相同的格式。至于公路下面是石头还是土地,就都交给操作系统处理,不劳用户操心。...这里的>就是提醒命令行,让它知道我现在想变换文本的方向了,我们不让标准输出输出到屏幕,而是要到a.txt这个文件 (好像火车轨道换轨)。...Linux的各个命令实际上高度专业化,并尽量相互独立。每一个都只专注于一个小的功能。但通过pipe,我们可以将这些功能合在一起,实现一些复杂的目的。

3.2K90

【C++】输入输出 ⑨ ( 文件 | 文件输入输出 | 继承结构 | 文件输入输出对象 | 文件打开与关闭 | 创建文件对象同时指定参数打开文件 | 调用文件 open 函数打开文件 )

文章目录 一、文件输入输出 1、文件输入输出简介 2、继承结构 3、文件输入输出对象 二、文件打开与关闭 1、文件打开 2、创建文件对象同时指定参数打开文件 3、调用文件对象 open 函数打开文件...4、关闭文件 三、Visual Studio 2019 中创建文件 一、文件输入输出 1、文件输入输出简介 文件 IO , 主要定义在 fstream.h 头文件中 , 该头文件中定义了以下三个类...open 函数打开文件 2、创建文件对象同时指定参数打开文件 创建文件对象同时指定参数打开文件 : 在 创建文件对象 时 在 构造函数 参数中 , 设置 文件路径 和 访问方式 ; 代码示例 :...创建文件输出对象并打开文件 : // 创建 文件输出 对象 // 1....第二种方式 文件输出 // 创建 文件输出 对象 并打开 // 1. 首先 , 创建 文件输出 对象 // 2.

17010

Java 字符文件读写

上篇文章,我们介绍了 Java 的文件字节流框架中的相关内容,而我们本篇文章将着重于文件字符的相关内容。...首先需要明确一点的是,字节流处理文件的时候是基于字节的,而字符处理文件则是基于一个个字符为基本单元的。...文件字符 FileReader/Writer 文件的字符可以说非常简单了,除了构造器,就不存在任何其他方法了,完全依赖文件字节流。...字符数组 CharArrayReader/Writer 字符数组和字节数组是类似的,都是用于解决那种不确定文件大小,而需要读取其中大量内容的情况。...,而只是将它们所对应的字符串写入文件,例如: print(123); 最终写入文件的不是 123 所对应的二进制表述,而仅仅是 123 这个字符串,这就是打印

1.2K20

几种IO读写文件

一、超类: 字节流: InputStream(读入流) OutputStream(写出) 字符: Reader(字符 读入流) Writer (字符写出) 二、文件操作 字节流: FileInputStream...bos.close(); //6.处理异常 由以上看出的操作基本相同,此文件操作是几乎一样的只是将文件作为参数传入缓冲的构造方法中堆文件读写文件的功能进行加强 注1:在字符读入缓冲...=(List)ois.readObject(); 3.关闭,处理异常 ois.close(); 五、转换流: 这类是用于将字符转换为字节输入输出,用于操作字符文件,属于字符的子类...(new FileInputStream(new File(“文件路径”)))); 4.记忆及其功能的方法: 前缀表示功能,后缀表示的类型; 比如说FileInputStream 前缀:File...同理 FileReader:表示操作文件的字符 ObjectInputStream :操作对象的字节输入流 5.拓展:获取键盘输入的字符的缓冲的写法: new BufferedReader(

70710

java学习---------IO学习---文件inputstream outputstream

文件有很多类 FileInputStream FileoutputStream FileReader FileWriter BufferedInputStream BufferedOutputSteam...BufferReader BufferWriter 缓冲  它们用来加快读取时间的, 然后直接看代码了: 第一个知识点是文件的创建和目录的创建: /* * File:既可以表示文件(.txt,doc...,ppt,mp3,...)也可以表示文件目录(即文件夹),与平台无关 * File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。...最后一定要加上这一句:in.close(); 这里我把它单独写出来,是因为显眼些:原因是 程序中打开的文件io资源不属于内存里的资源,java垃圾回收机制无法回收该资源,所以需要显是关闭文件的io...) i); } } catch (IOException e) { e.printStackTrace(); } finally { try { // 4.关闭现有的

74920

【C++】输入输出 ⑩ ( 文件 | 文件打开方式参数 | 文件指针 | 组合打开方式 | 文件打开失败 )

文章目录 一、文件打开方式参数 1、文件打开方式参数 2、文件指针 3、组合打开方式 4、文件打开失败 一、文件打开方式参数 1、文件打开方式参数 文件打开方式参数 : ios::in : 以只读方式打开文件...| ios::app); 2、文件指针 文件指针引入 : 使用 输入 / 输出 文件 打开文件后 , 都有一个文件指针 指向 默认的 文件位置 ; 文件指针作用 : 文件 输入 / 输出 对象...l ios::noreplace ; 4、文件打开失败 调用 文件输入输出 的 open() 函数 , 可能会打开失败 , 如果打开失败 , open() 函数返回 0 值 ; // 创建 文件输入流...然后 , 文件对象的 open 函数打开文件 ifstream fin; if ( fin.open("1.txt", ios::in) == 0 ) cout <<"文件打开错误..."; 在 文件输入输出对象 的 构造函数 中直接打开文件 , 如果打开失败 , 则创建 文件输入输出对象 失败 , 创建的对象值为 0 ; // 创建 文件输出 对象 // 1.

20610
领券