linux 下的文件

来源:互联网 发布:maya mac注册机打不开 编辑:程序博客网 时间:2024/05/17 02:20

linux的文件


前几天学姐已经为我们讲述了文件的一些操作和概念,我就用自己的话和思想来总结关键点。便于理解和记忆


都说在linux里没有其他只有文件,一切都被看作文件,下面我们来看看


.文件存储结构。

一般文件的存储结构是由三部分组成,1目录项2.inode 3.block


1.目录项


通常目录里面有什么,目录和文件,不过目录也是一个特殊的文件,如何来记录这些文件呢,由目录项,

目录项包括文件名和inode节点编号,目录项的作用只是类似与指针指向这些文件


2.inode

文件的索引节点,文件的基本信息和指向数据块的指针都在这里存放,inode信息可通过stat<filename>这条命令来查看


3.数据块

这没啥说的,用来存放文件数据内容的地方


方便大家记忆,关系如下

目录项(文件名 &&  inode编号)   ->   inode(基本信息  && 数据块指针)   -> 数据块



.挂载

1.当我们要使用某些设备时,比如u盘,需要读取里面的数据,我们必须把它放到一个目录下,而这个目录就称为挂载点,这个动作成为“ 挂载 ”。


2.所有的磁盘分区都必须挂载后才能使用,我们的我们的磁盘分区在开机时linux就帮我们挂载好了,如果要使用其他的外部设备,必须挂载到一个目录下才可以使用,并且挂在后此目录也暂时不可用。


挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]


.硬链接和软链接

硬链接:相当产生了一个平行的副本,对该文件或者副本修改,另外一个也随之修改,并且两个文件对应一个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


还有许多函数就不一一列举...

2 0