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

posted @ 2017-09-24 21:18  轻舟已过万重山  阅读(3478)  评论(0编辑  收藏  举报