• 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

  • 相关阅读:
    iOS启动项目(二)引入第三方库
    Swift技巧(九)CGImage To CVPixelBuffer
    Swift技巧(四)设置照片尺寸和格式
    Swift技巧(十) Protocol 的灵活使用
    Alamofire5.0.0 以上报错
    Swift技巧(八)CVPixelBuffer To CGImage
    Swift技巧(十一)重写运算符
    Swift技巧(五)设置圆角的代码
    Swift技巧(七)重识 Array
    Swift技巧(六)设置按钮状态并更改
  • 原文地址:https://www.cnblogs.com/how-are-you/p/7588703.html
Copyright © 2020-2023  润新知