open与fopen

article/2025/10/3 18:38:56

1.在将open与fopen之前,先讲文件描述符:

当一个可执行程序运行以后,就变成进程,操作系统会为每个进程分配一定的虚拟内存空间,32位操作系统就分配4G。虚拟内存空间结构如下图所示:

   1G是内核空间使用,剩余3G为用户空间,虚拟内存就是当物理内存(如内存条)不够时,从磁盘上分配一块空间。为什么要虚拟空间了?因为物理内存一般都很小,当有多进程要执行时,物理内存很快就分配完了,剩余的进程只有等待前面的进程完成以后才能运行,效率很低。使用虚拟内存能够更高效的分配物理内存。

    在内核区的进程管理中,有一个文件描述符表。一个进程有一个进程描述符表,最多可以存储1024个文件描述符,每打开一个文件就占用一个文件描述符。

    前三个文件描述符被stdin,stdout,stderr占用。

   2,讲完文件描述符,正式讲open 与fopen

   open为系统函数,fopen为标准c库函数。使用系统函数open返回的是文件描述符,使用c的标准库函数fopen,返回的是文件指针。通过文件描述符才能找到文件在磁盘中对应的位置。

常用的系统函数有:

对于标准c库函数:

     返回的是文件指针,其中封装了文件描述符以及缓冲区(在物理内存上)。数据时先写到缓冲区,再写到磁盘。磁盘是机械设备,读写为毫秒级别,而物理内存时电子设备,读写速度为纳米级别。如果对机械硬盘一个一个字符进行读写,速度较慢,可以先都存入缓冲,然后再一起写入到磁盘,能够节省时间,提高直行效率。

  通过上面两张图可以发现,标准c库函数先将数据存入buffer中,然后再调用系统函数对磁盘进行读写操作,标准c库函数不能直接对磁盘进行读写。


http://chatgpt.dhexx.cn/article/DgQmupbj.shtml

相关文章

open与fopen的区别

函数原型 FILE *fopen(const char *filename, const char *mode); 参数 filename-- 这是 C 字符串,包含了要打开的文件名称。 mode-- 这是 C 字符串,包含了文件访问模式。 功能 使用给定的模式mode打开filename所指向的文件。 1.层次不同 open是系统调用…

freopen()函数详解

freopen函数详解及在OJ评测系统中的使用 若要打开一个二进制文件,需要加上一个“b”字符。 重定向打开 freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout);重定向恢复 winfreopen("CON", &quo…

c语言关于freopen函数最全使用方法

hey,好久不见,最近沉迷游戏无法自拔,现在抽出时间来写写关于freopen函数的使用方法,这个freopen函数主要作用就是从文件读取函数同时写入文件,不像我们平常的控制台输入输出,也避免我们在刷一些题目时&…

C++文件操作之freopen

作为一个OIer,文件操作是很重要的。 如果没有文件操作或文件操作被注释,等待着你的就是爆零的命运。 C和C的文件操作,一般是用fopen或fstream,但在OI里,我们用freopen,即文件重定向。 它的用法其实也挺简单…

TVM中的auto-scheduling机制(Ansor)学习笔记

背景 TVM继承了Halide中算法(Algorithm)与调度(Schedule)分离的思想。用户使用TE(Tensor expression)这种DSL定义计算(算法),然后编译器优化相应的schedule,…

TVM的“hello world“基础流程 I

前言 继前图灵奖获得者Hennessy和Patterson在ISCA 2018提出“A New Golden Age for Computer Architecture”,编译器界大神Chris Lattner在ASPLOS 2021提出了“The Golden Age of Compiler Design”。另一方面,2020年图灵奖授予了编译器“龙书”作者Jef…

【TVM系列教程一】深度学习编译器及TVM 介绍

0x0. 介绍 大家好呀,在过去的半年到一年时间里,我分享了一些算法解读,算法优化,模型转换相关的一些文章。这篇文章是自己开启学习深度学习编译器的第一篇文章,后续也会努力更新这个系列。这篇文章是开篇,所…

TVM运行系统

TVM运行系统 TVM支持多种编程语言用于编译器堆栈的开发和部署。在本说明中,我们解释了TVM运行时的关键元素。 我们需要满足很多有趣的要求: 部署:从python / javascript / c 语言调用已编译的函数。 调试:在python中定义一个函数…

tvm的一个大体介绍

TVM的一个大体介绍 导入模型模型转换到relay转换到 _tensor_ _expression_ (TE)自动优化调度模型编译转换到TIR(tensor IR)编译器编译到机器码 导入模型 可以支持从tf,pytorch,或者onnx框架中导入模型。 模型转换到relay 上述框…

TVM 架构设计

TVM 架构设计 本文面向希望了解TVM体系结构和/或,积极参与项目开发的开发人员。 主要内容如下: 示例编译流程,概述了TVM将模型的高级概念,转换为可部署模块的步骤。 逻辑架构组件部分,描述逻辑组件。针对每个逻辑组…

TVM的安装过程

最近在看深度学习编译器相关的工作,其中FlexTensor给我留下了比较深刻的印象,加上这项工作是开源的,所以想看看这份工作的源码。首先是怎么把工程跑起来,FlexTensor倚仗TVM做代码生成,所以首先得安装TVM。 首先给出官…

TVM系列 - 图优化 - 算子融合

TVM系列 - 图优化 - 算子融合 图优化综述 声明一下,本文所有的理解都是基于个人理解。 图优化算是一个推理框架前端比较成熟的操作了,一般来说,针对模型做图优化有两个目的(对于通用框架来说,就加速减少计算一个目的…

TVM 从入门到精通 | 安装 TVM (Part 2)

本文首发自:公众号 HyperAI超神经 内容一览:TVM 共有三种安装方法:从源码安装、使用 Docker 镜像安装和 NNPACK Contrib 安装。本文讲解如何通过 Docker 镜像 和 NNPACK Contrib 安装。 关键词:TVM Docker 基础教程 欢迎回…

初识 TVM

如有图像或公式显示错误,可以访问我的个人博客:https://www.wanglichun.tech/2019/11/15/tvm/ 笔者也是最近偶然的机会才开始接触TVM,使用过后发现,经过auto-tuning后的TVM模型在速度是竟然超过了TensorRT,并且笔者使用的是MXNet…

TVM(端到端深度学习编译器)简介

TVM-算子编译器前后端 前言TVM出现背景TVM是什么为什么用TVM,TVM解决了什么当前问题:TVM解决了 TVM如何解决具体实现手段如何设计搜索空间Search Space优化策略图优化 - 算子融合图优化 - Layout Transform张量优化 - 矩阵乘法 GEMM张量优化 - 调度算法张…

tvm学习笔记(五):tvm工作原理

一、总体流程: TVM的工作流程:首先,将网络表示成统一的表示形式(Intermediate Representation),并进行一些可重用的图优化;然后,利用不同的后端生成对应设备代码,如图1所…

TVM系列 - 量化

TVM系列 - 量化 TVM量化原理TVM量化现状TVM量化原理介绍TVM量化代码解析 TVM量化原理 关于量化的方式其实已经有足够的文章去了解目前最主流的两种:离线量化及训练时量化(大家应该能理解,其实就是伪量化),而tvm的作者…

TVM-初识TVM

目录 TVM简介那么TVM是什么?TVM做了哪些工作 TVM简介 随着深度学习的发展,深度学习的能力可以说是越来越强大,识别率节节攀升,与此同时,深度学习框架也变得越来越多,目前比较主流的深度学习框架包括&#…

【TVM系列二】TVM介绍

文章同步更新在公众号 AIPlayer,欢迎扫码关注,共同进步 目录 一、TVM的工作流程 1、整体流程 2、关键数据结构 3、Transformations 4、搜索空间和基于机器学习的转换 5、目标代码转化 二、逻辑架构组件 三、运行TVM实例 1、交叉编译runtime 2、…

TVM:简介

TVM:简介概述 Apache TVM 是一个用于 CPU、GPU 和机器学习加速器的开源机器学习编译器框架。它旨在使机器学习工程师能够在任何硬件后端上高效地优化和运行计算。本教程的目的是通过定义和演示关键概念,引导您了解 TVM 的所有主要功能。新用户应该能够从…