ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux 文件总结(二)

2021-03-05 15:31:08  阅读:151  来源: 互联网

标签:总结 文件 int argv char Linux include 链接 size


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

标签:总结,文件,int,argv,char,Linux,include,链接,size
来源: https://blog.csdn.net/weixin_40204595/article/details/114395770

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有