zoukankan      html  css  js  c++  java
  • Linux一切皆文件

    一切皆文件

    • 首先通常在windows中是文件的东西,它们在linux中也是文件
    • 其次一些在windows中不是文件的东西, 比如进程, 磁盘, 也被抽象成了文件. 你可以使用访问文件的方法访问它们获得信息.
    • 再其次,一些很离谱的东西, 比如管道, 比如/dev/zero(一个可以读出无限个0的文件) /dev/null(一个重定向进去之后就消失了的文件). 它们也是文件
    • 再再其次, 类似于socket这样的东西, 使用的接口跟文件接口也是一致的.

    带来的好处就是, 你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)来处理unix中大多数的资源.这就使得组合了简单的命令和字符处理工具(awk, sed)之后, shell脚本就能发挥出强大的功能.

    文件分类

    Linux下文件一般有如下几种类型:

    1.普通文件          # xxx.log
    2.目录              # /usr/ /home/
    3.字符设备文件      # /dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件,比如猫等串口设备
    4.块设备文件        # /dev/hda1 的属性是 brw-r----- ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备
    5.套接字文件        # /var/lib/mysql/mysql.sock srwxrwxrwx
    6.管道              # pipe
    7.符号链接文件      # softlink...

    文件操作系统调用

    虽然对文件的操作就那么几个,但是由于linux把所有的设备、文件的操作都统一了,所以这些系统调用会有很多参数来处理各种类型的文件,所以还是有点复杂的,这里的复杂有一点是如果你还没有全面掌握各种类型的文件操作,读文档的时候就会遇到某些参数一脸懵逼,不知所云,比如 O_NONBLOCK 这个标志对普通的文件是不起作用的,对什么文件起作用?那你得操作块设备,字符设备,FIFOs (named pipes),所以这里需要有比较系统全面的知识才能看的比较通透

    详细的系统调用说明参考 man或系统文档 man-fileopen

    内核实现

    代码示例 / github

  • 相关阅读:
    用面向对象的方法重写选项卡
    js 深入理解原型模式
    ECMAScript中的两种属性
    引用类型
    js 变量、作用域和内存问题
    html5 canvas画布尺寸与显示尺寸
    网页画板制作
    了解数组中的队列方法,DOM中节点的一些操作
    JavaScript中的数组对象遍历、读写、排序等操作
    this在方法赋值过程中无法保持(隐式丢失)
  • 原文地址:https://www.cnblogs.com/how-are-you/p/7588703.html
Copyright © 2011-2022 走看看