Linux文件类型
对于内核而言,所有打开的文件都是通过文件描述符引用(FD),文件描述符是一个非负整数,当打开现有问价或创建一个新文件时,内核向进程返回一个文件描述符。
按照惯例,shell把文件描述符0与进程的标准输入关联,文件描述符1与标准输出关联,文件描述符2与标准错误关联。
对于系统而言,一切皆文件,常见的文件分类:
1)普通文件(regular file): 这是最常见的文件类型,至于这种数据是二进制还是文本,对于内核而言并无区别,(例外:二进制可执行文件,为了执行程序,内核必须理解其格式。所有二进制可执行都遵循一种标准化的格式。ELF(Executable and Linked Format),COFF, .out , PE(Windows Portable Executable)),使得内核能够确定程序的 code section and data section);
2) 目录文件:这种文件包含了其他文件的名字以及指向与这些文件有关信息的指针。对于一个目录文件具有读权限的任意进程都可以读取该目录内容,(x权限对目录的特殊性,只有具有x,才能进入该目录,才能进一步根据r,w进行读写);
3)块特殊文件:这种类型的文件提供设备(如磁盘)带缓冲的访问,每次访问以固定长度为单位进行,
4)字符特殊文件:这种类型的文件提供设备不带缓冲的访问,每次访问长度可变;
5)FIFO : 这种类型的文件用于进程间通信,有时也称命名管道;
6)socket : 这种类型的文件用于进程间网络通信,常见的/tmp/mysql.socket;
7)符号链接(symbolic link): 这种类型的文件指向另一个文件;(ln -s ,ln软硬区别)
操作系统提供三个层次上的抽象: 文件,虚拟存储器,进程
linux 一切皆文件,简化了对各种差异大的IO设备的访问,read,write等