Linux目录与链接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/puliao4167/article/details/85262832

目录

    在文件系统中,目录与普通文件主要有两个区别。

  1. i节点条目中,会将目录标记为一种不同的文件类型。
  2. 目录是一种特殊的文件,本质上是一个表格,包含文件名和i节点编号。而文件的i节点中存储信息列表不包含文件名。 

    关于目录的系统调用有很多。

#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>

int mkdir(const char *pathname,mode_t mode); //mode和open()调用指定权限相似

int rmdir(const char *pathname);//删除的目录为空时,调用才会成功

DIR *opendir(const char *pathname);//打开目录,返回DIR类型结构指针

struct dirent *readdir(DIR *dirp);//从一个目录流中读取连续条目

int closedir(DIR *dirp);//关闭目录流

硬链接

    硬链接是可以在不同目录下有多个文件名称,均指向相同的i节点,也就是指向相同的文件。因此每个文件都会有一个i节点的链接计数。在删除文件时,将相应的i节点的链接计数减一,若链接计数因此降为0,才释放文件名所指带的i节点和数据块。

    ln abc def。为文件abc创建一个硬链接def。利用系统调用link()和unlink()分别创建和移除硬链接。

#include <unistd.h>

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

int unlink(const char *pathname);

    硬链接的限制有两点,均可用符号链接取代:

  1. 硬链接必须与指代文件在同一个文件系统。因为只有在同一个文件系统,才能保证指向相同的一个i节点。
  2. 不能为目录创建硬链接。

软链接(符号链接)

    符号链接是一个内容包含了另一个文件名称的文件,其不会加入文件的链接计数中,因此可以链接不同文件系统中的一个文件。

    ln -s abc def。为文件abc创建一个符号链接def。利用系统调用symlink()和readlink()可以创建符号链接。

#include <unistd.h>

int symlink(const char *filepath,const char *linkpath);

int readlink(const char *pathname,char *buffer,size_t bufsiz);

参考 《TLPI》、《APUE》

猜你喜欢

转载自blog.csdn.net/puliao4167/article/details/85262832
今日推荐