Linux 文件总结(二)

一、Linux文件系统结构

    1、     文件操作的基本元素:目录结构(目录项)、索引节点(i节点)、文件的数据
 

       2、从文件名到文件内容:

                 在目录中找到文件名--->目录项中包含i节点的位置----->在i节点中找到数据块的列表

Linux 文件总结(二)

 

二、文件硬链接

   1、创建硬链接的shell命令

       ln srcpath newpath

Linux 文件总结(二)

2、硬链接在内核中的存在形态

Linux 文件总结(二)

3、创建文件硬链接的相关API

    int link(const char * existingpath ,const char * newpath);

    创建一个指向现存文件的硬链接,成功返回0,失败返回-1

   int unlink(const char *pathname);

    删除pathname指定的硬链接,并将由pathname所引用的文件链接数减1,成功返回0,失败返回-1

  

#include <stdio.h>
#include <unistd.h>

int main(int argc, char ** argv)
{
    if(argc < 3)
    {   
        printf("usage: %s srcPath destPath1 destPath2 ...",argv[0]);

        return -1; 
    }   


    int i = 0;

    for(i = 2;i < argc;i ++) 
    {   
        if(link(argv[1],argv[i]) < 0)
        {
            printf("%s link error\n",argv[i]);

            continue;
        }
    
    }   



    return 0;
}

Linux 文件总结(二)

三、文件软连接

   1、创建文件软连接的shell命令

     ln -s srcpath newpath

Linux 文件总结(二)

软连接在内核中的存在形态:

Linux 文件总结(二)

2、软连接相关的API

    int symlink(const char * actualpath, const char * sympath);

   创建一个符号链接(软连接),成功返回0,出错返回-1

    int readlink(const char* pathname,char * buf,size_t size);

    打开该链接,并读取软连接的名字,注意读到的是pathname而不是内容。成功返回读到的字节数,出错返回-1.

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>


int main(int argc,char ** argv)
{
    if(argc != 3)
    {
        printf("usage : %s actualpath sympath\n",argv[0]);

        return -1;
    }

    
    if(symlink(argv[1],argv[2]) < 0)
    {
        printf("symlink error\n");

        return -1;
    }

    int fd = -1,size = 0;
    char buf[1024] = {0};

    fd = open(argv[2],O_RDONLY);

    if(fd < 0)
    {
        printf("open error\n");

        return -1;
    }

    //读软链接指向的原文件的内容
    size = read(fd,buf,1024);
    
    if(size > 0)
    {
    
        write(STDOUT_FILENO,buf,size);
        printf("\n");
    }

    memset(buf,0,1024);
    //读软连接指向的源文件的文件名
    if((size = readlink(argv[2],buf,1024)) > 0)
    {
        write(STDOUT_FILENO,buf,size);
        printf("\n");
    }

    close(fd);


    return 0;
}

Linux 文件总结(二)

上一篇:惊呆!1篇文章讲明白99.99%的人都不知道的勒索病毒!!!


下一篇:双进程互相保活-flock实现