linux的文件
前几天学姐已经为我们讲述了文件的一些操作和概念,我就用自己的话和思想来总结关键点。便于理解和记忆
都说在linux里没有其他只有文件,一切都被看作文件,下面我们来看看
一.文件存储结构。
一般文件的存储结构是由三部分组成,1目录项2.inode 3.block
1.目录项
通常目录里面有什么,目录和文件,不过目录也是一个特殊的文件,如何来记录这些文件呢,由目录项,
目录项包括文件名和inode节点编号,目录项的作用只是类似与指针指向这些文件
2.inode
文件的索引节点,文件的基本信息和指向数据块的指针都在这里存放,inode信息可通过stat<filename>这条命令来查看
3.数据块
这没啥说的,用来存放文件数据内容的地方
方便大家记忆,关系如下
目录项(文件名 && inode编号) -> inode(基本信息 && 数据块指针) -> 数据块
二.挂载
1.当我们要使用某些设备时,比如u盘,需要读取里面的数据,我们必须把它放到一个目录下,而这个目录就称为挂载点,这个动作成为“ 挂载 ”。
2.所有的磁盘分区都必须挂载后才能使用,我们的我们的磁盘分区在开机时linux就帮我们挂载好了,如果要使用其他的外部设备,必须挂载到一个目录下才可以使用,并且挂在后此目录也暂时不可用。
三.硬链接和软链接
硬链接:相当产生了一个平行的副本,对该文件或者副本修改,另外一个也随之修改,并且两个文件对应一个inode节点,删除其中一个另外一个不受影响
软链接:也叫符号链接,相当与对文件在新的位置上建立了一个“ 快捷 ”,软链接的文件和源文件有着密切的关系,如果删除源文件,软链接的文件将无用。当然删除这个软链接文件对源文件也没有什么影响
模型:软链接文件 -> inode -> 文件
四.文件描述符
文件描述符,简单的来说就相当与标准C里的文件指针,只不过我们这里是编号,文件描述符是用一个非负的整数来表示,范围是0~ OPEN_MAX,系统不同OPEN_MAX不同,对于系统而言,打开文件都是由文件描述符引用。
当系统打开或者创建一个文件时,系统会向进程返回一个文件描述符。
然而每个进程创建的时候首先会默认的打开三个文件描述符,
standartinput (0)
standart output (1)
standerror (2)
那么我们继续打开一个文件返回的结果是什么呢?
来看一个简单的程序
#include<stdio.h>
#include<fcntl.h>
int main(int argc, char **argv)
{
int fd;
int fd2;
fd = open(“1.txt”,O_RDONLY);
fd2 = open(“2.txt”,O_RDONLY);
printf(“fd= %d,fd2 = %d”,fd,fd2);
return0;
}
答案当然是3,4啦,以此类推
五.几个常用的函数,我简单的描述一下
1.open函数 用来打开文件
#include<sys/stat.h>
#include<sys/type.h>
#include<fcntl.h>
int open(const char pathname,int flag)
成功返回文件描述符
pathname是文件名,flag是文件标识
通常是文件标识
O_RONLY只读
O_WONLY只写
O_RDWR读和写
这三个标识为互斥的,也就是说不能同时使用
O-APPEND:所有数据以追加的方式添加到文件后面
O_TRUNC:若文件存在并以可写的方式打开时,此标志会将文件的长度清0,即原文文件中保存的数据将丢失,但文件的属性不变
O_REAT: 若文件不存在则自动建立文件,此时才需要用到第三个参数mode
,说明新文件的存取权限
O-EXCL: 如果O-CREAT也被是指,此指令会去检查文件是否存在,不存在则创建文件,存在则导
致打开文件失败
read
#include<unistd>
ssize_t read(int fd, void *buf, size_t count);
从文件中打印读出数据。
返回,读到的字节处,读不到返回0,出错返回-1
write
#include<unistd.h>
ssize_ write (intfd, const void *buf, size_t count)
打开文件写数据
成功返回以写的字符串,失败为-1
lseek
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int filesdes, off_t offset, int whence)
设置文件内容读写位置
返回新的文件的位移,若出错返回-1
whence和 SEEK_SET ,SEEK_CUR ,SEEK_END
关系密切
int close(int filename)
#include <unistd.h>
关闭一个打开文件。
成功返回0,失败返回-1
还有许多函数就不一一列举...