一切皆文件-文件是对IO的最简抽象

引用《Linux Kernel Development》原书里面的一句话

in Unix, everything is a file.This simplifies the manipulation of data and devices into a set of core system calls: open(), read(), write(), lseek(), and close().

“UNIX文件本质上就是一大袋字节。” —— 《UNIX编程艺术》

说穿了,文件是对IO的最简抽象。

文件就是字节序列,系统中所有的输入输出其实都是通过UNIX I/O函数调用读写文件来实现的。

----深入理解计算机系统

https://www.zhihu.com/question/21040222/answer/96976318

在Unix中,任何可读/写也就是有I/O的设备,无论是文件,socket,驱动,在打开设备之后都有一个对应的文件描述符。Unix将对这些设备的读写简化在read/write中。

换言之,你只需要把打开的文件描述符传给这两个函数,操作系统内核知道如何根据这个文件描述符得到具体设备信息,内部隐藏了对各种设备进行读写的细节,所有这些对用户都是透明的,你只需要打开它,得到fd,再进行相应的操作就够了。

that a wide range of input/output resources  are simple streams of bytes exposed through the filesystem name space.[1]

https://www.cnblogs.com/feng9exe/p/8191921.html

原文地址:https://www.cnblogs.com/feng9exe/p/10221729.html

时间: 2024-12-29 23:51:44

一切皆文件-文件是对IO的最简抽象的相关文章

慕课网_文件传输基础——Java IO流

fadf 第1章 文件的编码 1-1 文件的编码 (15:07) 第2章 File 类的使用 2-1 File 类常用 API 介绍 (10:50) import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) { File file = new File("E:\\helloworld\\java"); System.out

文件是数据(字节)流的抽象-为什么C++中会把文件操作抽象为fstream?

这不过是返祖罢了.正确的问题是为什么会把数据流抽象成文件. 设备-字节流-文件. 一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列). 文件抽象为数据流一定程度上是 Unix 造成的. 传统上,计算机上用于 IO 的设备大致可以分成两大类,块(block)设备和流(stream)设备.前者可以抽象成一组数据块,读写必须数据块为单位,但一般可以指定任意一个数据块读写,典型的例子比如磁盘,以扇区为单位进行读写.后者可以抽象成一个数据流,你可以一个字节一个

环境变量,属性文件,文件基础操作,目录基础操作,遍历指定后缀名文件

环境变量和属性 环境变量相关: 1.得到某个/所有环境变量的值 2.设置环境变量的值 3.列出全部系统属性名 import java.util.Enumeration; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; public class Environment { public static void main(String[] args) { // TODO Auto-gener

文件/文件夹权限设置命令chmod的具体使用方法

chmod是文件/文件夹权限设置的命令,在Linux中常常遇到.本博文下面总结chmod的具体使用方法. Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其它other.u表示该档案的拥有者.g表示与该档案的拥有者属于同一个群体(group)者,o表示其它以外的人,a表示这三者皆是. + 表示添加权限.- 表示取消权限.= 表示唯一设定权限. r表示可读取,w表示可写入,x表示可运行. 举例说明: (1).将档案file1.txt 设为全部人皆可读取: chmo

【转】C#添加修改删除文件文件夹大全

[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt");sw.WriteLine("追逐理想");sw.WriteLine("kzlll");sw.WriteLine(".NET笔记");sw.Flush();sw.Close();C#拷贝文件string

[Java] File类 递归 获取目录下所有文件/文件夹

package com.xiwi; import java.io.*; import java.util.*; class file{ public static void main(String args[]){ System.out.println("file Go..."); // 这里改成你要遍历的目录路径 recursiveFiles("F:\\fileText"); System.out.println("file End."); }

Java 文件/文件夹

File(文件.路径) public static void main(String[] args) throws IOException { //构造方法  无法判断 路径是否存在 win下文件夹名称不区分大小写  文件与文件夹不能重名 File f = new File("D:\\a"); //(文件/文件夹)对象 //File f = new File("D:" + File.separator + "a"); //多系统都能用 //Fil

Java文件/文件夹 创建-删除-重命名

文件.文件夹: 创建-删除-重命名 import java.io.File; import java.io.IOException; public class Test2 { //创建文件 [如果目录不存在则创建失败!] public static void createFile() throws IOException { String folderPath="F:\\temp"; String fileName="Test.java"; //创建文件夹路径对象

asp.net Web 项目的文件/文件夹上传下载

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"