io学习笔记(代码片段)

RelievedAbility RelievedAbility     2022-12-02     433

关键词:

虚拟文件系统、文件描述符、IO重定向

一切皆文件,进程隔离

操作系统宏观介绍

  1. 常用的IO设备有哪些? 磁盘、网卡

  2. Linux 中物理盘是怎么映射到操作系统中的? Kernel 中VFS(Virtual File System)

  3. 在Linux中如果两个程序都去加载同一个文件,那么内存中会有几份?1份。文件在打开的时候会有一个inode id,程序在访问文件的时候VFS首先会判断当前文件有没有在pagecache中被加载过,没有的话触发缺页就会加载对应inode id 对应的源数据,然后再内存中开辟pagecache(默认4k) 给当前文件,后续的如果发现pagecache里面已经加载了就直接返回了。

  4. 延伸:

    1:当多个程序操作同一个文件,其中一个程序修改了文件,对应pagecache的变化和什么时候会同步到磁盘?
    1)首先会吧pagecache里面标记为dirty状态
    2)然后会通过flush同步到磁盘(flush的方式取决于IO模型,OLD IO flush后并非直接刷新到磁盘,而是需要等待kernel调度, NIO 调用了flush 则是会直接调用kernel将数据刷新到磁盘)
    2:程序最终是通过什么访问文件的?
    1)fd (file descriptor) 文件描述符
    2)指针seek (偏移量)对应文件的不同位置
    

虚拟文件系统

  1. Linux 中如何查看kernel维护的目录树结构? df 命令

  2. Linux 中swap 分区的作用? 当系统运行当前进程内存不足时会把暂时用不到的进程转移到swap 分区,然后把当前需要执行的进程资源放入内存。

  3. Linux 中常见的文件类型有哪些?

    • -:普通文件 lsof 中TYPE 为REG

    • d:目录

    • b:块设备 延伸 : 如何创建块文件,使用dd 命令

      dd  if=/dev/zero of=mydisk.img bs=1048576 count=100
      
    • c:字符文件 lsof 中TYPE 为CHR

    • s:socket

    • p:pipeline

    • l:链接

      ln  #创建硬链接
      ln -s #创建软链接延伸  
      软链接和硬链接区别?
      共同点:
      修改链接文件和源文件中任何一个互相都能看到修改后的内容。
      不同点
      硬链接类似java里面的多个引用指向一个对象,删除其中一个对另一个并没有影响。
      软链接更像是windows 中应用的桌面快捷方式,如果删除源文件,则软链接就会报错,类似windows 中应用程序被删了,桌面快捷方式没有被清理,然后点击桌面快捷方式的情景。
      

文件描述符nodeid、脏读

Linux 中一切皆文件,进程对应的文件目录是哪里?

/proc
/proc/$$ #当前bash的目录

KaTeX parse error: Can't use function '$' in math mode at position 15: 当前bash的pid,它和$̲BASHPID 有什么区别? 的优先级高于管道,$BASHPID 则没有管道优先级高,所以下面两个命令执行的结果会不同

echo $$ | cat
echo $BASHPID | cat
  1. Linux 中如何查看一个进程打开了多少文件?(查看所有的文件描述符)

    lsof -op $$ #查看所有的文件描述符细节
    /proc/$$/fd #查看所有的文件描述符
    

    延伸:开发过程中如何查看8080端口被那个进程占用

    lsof -i :8080
    
  2. 每个程序都会有标准输入输出吗?

    是的,那么对应的文件描述符是什么? 0 标准输入,1标准输出,2标准错误输出 u 表示可以读写

    当前进程的用到的文件描述符目录是什么?

    cd /proc/$$/fd #查看所有的文件描述符
    ls -al
    
  3. 如何查看一个文件的Inode 号

    stat /test.txt
    

    延伸命令,read 只会读到换行符

    exec 8< test.txt
    read a 0<& 8
    

socket pipeline

  1. 如何查看进程使用pagecahe 的情况

    pcstat -pid $$
    
  2. 如何查询当前脏页

    cat /proc/vmstat | grep dirty
    #延伸,查询当前脏页的刷新时间
    sysctl -a | grep dirty
    
  3. Socket 文件怎么创建?

    exec 8<> /dev/tcp/www.baidu.com/80
    cd /proc/$$/fd
    ll
    lsof -op $$
    
  4. 重定向是什么?

    重定向是一种机制,注意不是命令。< 输入重定向 > 输出重定向

    ls . 1> ~/test/t.txt #将当前目录的文件列出,重定向输出到t.txt中
    cat 0< text.txt 1> cat.out   #将cat的输入,输出分别重定向
    ls ./ /dddosl 1>04.txt 2>& 1 #文件描述符的时候一定是2>& 1 要带&,如果是文件名则不需要
    

io流学习笔记(代码片段)

文章目录IO流,什么是IOIO流的分类javaio的四大家族需要掌握的十六个流FileInputStream(从文件中读)往byte数组中读FileInputStream中一些其他的方法FileOutputStream的使用(往文件中写)文件拷贝FileReader(字符输入流使用方法)FileWriter(字符... 查看详情

repuest转发学习笔记一(代码片段)

学习图:Java代码importjava.io.IOException;importjava.io.InputStream;importjava.util.Properties;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletR 查看详情

http请求内容压缩学习笔记(代码片段)

importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.zip.GZIPOutputStream;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;i 查看详情

ios学习笔记--数据存储(代码片段)

iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3CoreData1.XML属性列表(plist)归档每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系... 查看详情

io学习笔记(代码片段)

虚拟文件系统、文件描述符、IO重定向一切皆文件,进程隔离操作系统宏观介绍常用的IO设备有哪些?磁盘、网卡Linux中物理盘是怎么映射到操作系统中的?Kernel中VFS(VirtualFileSystem)在Linux中如果两个程序都去加载同一个文件&... 查看详情

java学习笔记-io篇:对象流objectinputstreamobjectoutputstream(代码片段)

Java学习笔记-IO篇:对象流ObjectInputStream、ObjectOutputStreamObjectOutputStreamObjectInputStream序列化、反序列化序列化writeObject将对象写入磁盘文件反序列化readObject取出对象自定义Serializable对象writeObject、readObjectputFields、readFiel 查看详情

java学习笔记-io篇:对象流objectinputstreamobjectoutputstream(代码片段)

Java学习笔记-IO篇:对象流ObjectInputStream、ObjectOutputStreamObjectOutputStreamObjectInputStream序列化、反序列化序列化writeObject将对象写入磁盘文件反序列化readObject取出对象自定义Serializable对象writeObject、readObjectputFields、readFiel 查看详情

javaio学习笔记四:socket基础(代码片段)

作者:Grey原文地址:JavaIO学习笔记四:Socket基础准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为:io1实例:192.168.205.138io2实例:192.168.205.149安装必要工具:yuminstall-ystracelsofpmaptcpdump准备服务端代码importjava.io.*;i... 查看详情

reactnative学习笔记(代码片段)

1、搭建开发环境英文文档:http://facebook.github.io/react-native/docs/getting-started.html中文文档:https://reactnative.cn/docs/0.51/getting-started.html所有的环境配置好后react-nativeinitmyProjectcdmyProjectreact-nativerun-ios开 查看详情

学习笔记之microsoftazure(代码片段)

World‘sMostPopularAPIFramework|Swaggerhttps://swagger.io/Swaggeristheworld’slargestframeworkofAPIdevelopertoolsfortheOpenAPISpecification(OAS),enablingdevelopmentacrosstheentireAPIlifecycle,from 查看详情

request应用-请求头学习笔记(代码片段)

request对象常用API1)取得请求头相关的信息*a)request.getHeader(String):Stringb)request.getHeaders(String):Enumerationc)getHeaderNames():Enumerationjava代码实现:importjava.io.IOException;importjava.io.PrintWriter;importja 查看详情

apue学习笔记1:unix文件io(代码片段)

前言本文总结APUE第三章:文件IO的知识点和对代码实践的总结。实践的系统api头文件:<fcntl.h>为了节省时间,仅简单记录函数的名字忽略原型,重点在于记下自己实践中的感悟。functioncreatopenclosereadwritelseekfcntl实践... 查看详情

apue学习笔记1:unix文件io(代码片段)

前言本文总结APUE第三章:文件IO的知识点和对代码实践的总结。实践的系统api头文件:<fcntl.h>为了节省时间,仅简单记录函数的名字忽略原型,重点在于记下自己实践中的感悟。functioncreatopenclosereadwritelseekfcntl实践... 查看详情

java学习笔记-io篇:读写文本文件txt(代码片段)

Java学习笔记-IO篇:读写文本文件txt读字符FileReader逐字读取BufferedReader逐行读取Scanner逐行读取StringReaderProperties读配置文件FileInputStream读UTF-8字符集读取整个文件到byte[]字节流转字符流Java7-Files读取整个文件到byte[]读取整个文件... 查看详情

java学习笔记-io篇:文件与目录(代码片段)

Java学习笔记-IO篇:文件与目录File介绍增删改递归删除Java7Files状态检测设置权限获取文件信息遍历目录FilenameFilter过滤FileFilter过滤参考资料File介绍File作为一个工具类,没有太多要学习的东西。把方法过一遍知道它能干啥... 查看详情

java学习笔记-io篇:文件与目录(代码片段)

Java学习笔记-IO篇:文件与目录File介绍增删改递归删除Java7Files状态检测设置权限获取文件信息遍历目录FilenameFilter过滤FileFilter过滤参考资料File介绍File作为一个工具类,没有太多要学习的东西。把方法过一遍知道它能干啥... 查看详情

pil(pillow)的学习笔记(代码片段)

1将图像的字节数组转换为Image对象image_bytes#图像字节码importiofromPILimportImageimg=Image.open(io.BytesIO(image_bytes))#io.BytesIO():转换为字节流 查看详情

重定向302与localhost学习笔记(代码片段)

1、新建工程:importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.htt 查看详情