Linux 文件总结(二)

一、Linux文件系统结构

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

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

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

 

二、文件硬链接

   1、创建硬链接的shell命令

       ln srcpath newpath

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

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;
}

三、文件软连接

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

     ln -s srcpath newpath

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

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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值