文件和目录详解(六)---link和unlink函数详解

  为了解释清楚这两个函数,首先必须要有清楚 目录项 和 inode节点 两个概念。目录文件中存放的是文件名和对应的inode号码,统称为目录项。link和unlink函数分别是用来创建硬链接和删除硬链接的。两个函数中的操作都是原子操作。

======================================================

函数原型:

函数参数:

  • oldpath:源文件路径名
  • newpath:新文件路径名

返回值:

  • 当oldpath不存在或者newpath存在时调用失败返回 -1
  • 调用成功返回 0

======================================================

函数原型:

函数参数:

  • pathname:删除的文件名

返回值:

  • 调用成功时返回 0
  • 调用失败时返回 -1

======================================================

  我们知道Linux中文件是用inode节点来区分文件的,当我们删除一个文件的时候并不一定系统就会释放inode节点的内容。当满足下面的要求的时候系统才会释放inode节点的内容

  • inode中记录指向该节点的硬链接数为0
  • 没有进程打开指向该节点的文件

  使用unlink函数删除文件的时候,只会删除 目录项 ,并且将inode节点的硬链接数目减一而已,并不一定会释放inode节点。

如果此时没有进程正在打开该文件或者有其他文件指向该inode节点,该inode节点将会被释放;如果此时有进程正在打开一个文件,而此时使用unlink删除了该文件,那么此时只是删除了目录项,并没有释放,因为此时仍然有进程在打开这个文件

========================================================

  unlink函数的另一个用途就是用来创建临时文件,如果在程序中使用open创建了一个文件后,然后立即使用 unlink 函数删除文件,由于此时进程正在打开该文件,所以系统并不会释放该文件的 inode 节点,而只是删除其目录项。当进程退出时,该inode节点将会立即被释放。

临时文件可以用在进程间通信中的 有名管道 通信中。

时间: 2024-10-17 08:41:56

文件和目录详解(六)---link和unlink函数详解的相关文章

文件和目录详解(十)---chdir和getcwd函数详解

对于每个进程来说,都有一个当前工作目录,进程中所有的相对文件路径名都会以这个当前工作目录为起始点.一般来说,默认的当前工作目录就是创建进程时所处的目录. 使用 chdir 函数可以修改进程的当前工作目录,使用 getcwd 函数可以用来获取当前工作目录的绝对路径名. ===================================================== 函数原型: 函数参数: path:要修改的目录路径 返回值: 调用成功时返回 0 调用失败时返回 -1 ==========

文件和目录详解(八)---symlink和readlink函数详解

symlink 函数和 readlink 函数主要是针对符号链接文件的操作.symlink 函数用来创建符号链接文件,和 link 文件是对应的.readlink 函数用来读取链接文件本身的内容(也就是符号链接指向的文件的文件名). ===================================================== 函数原型: 函数参数: oldpath:源文件的路径名 newpath:符号链接文件的路径名 返回值: 调用成功时返回 0 调用失败时返回 -1 ======

文件和目录详解(五)---chmod和fchmod函数详解

chmod和fchmod函数分别可以用来修改文件和一个已经打开的文件的文件权限位. ======================================================= 函数原型: 函数参数: path:要操作的文件路径名 fd:要操作的文件描述符 mode:要修改的文件权限 返回值: 调用成功时返回 0 调用失败时返回 -1 ======================================================= 参数mode可以为下列宏的组合

IO系统-文件与目录操作

1.文件内核数据结构 一个打开的文件在内核中使用三种数据结构表示: (1)文件描述符表 文件描述符标志 文件表项指针 (2)文件表项: 文件状态标志:读.写.追加.同步和非阻塞等状态标志 当前文件偏移量 i节点表项指针 引用计数器 (3)i节点 文件类型和对该文件的操作函数指针 当前文件长度 文件所有者 文件所在的设备.文件访问权限 指向文件数据在磁盘上所在位置的指针等. 2. 原子操作 (1)文件追加 打开文件时使用O_APPEND标志,进程对文件偏移量调整和数据追加成为原子操作. O_APP

Python中的文件和目录操作实现代码

对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这些函数无论是在Unix.Windows还是Macintosh平台上,它们的使用方式是完全一致的. 本文将详细解释这些函数的使用方法.首先,我们介绍Python语言中类似于Windows系统的dir命令的列出文件功能,然后描述如何测试一个文件名对应的是一个标准文件.目录还是链接,以及提取文件大小和日期的方法.之后,我们还将介绍如何删除文

APUE(4)---文件和目录 (2)

umask函数为进程设置文件模式创建屏蔽字,并返回之前的值,这是少数几个没有出错返回函数中的一个.其中cmask是9个常量(S_IR/W/XUSR.S_IR/W/XGRP.S_IR/W/XOTH)中的若干个按位“或”构成的. #include<sys/stat.h> mode_t umask(mode_t cmask); //返回值:之前的文件模式创建屏蔽字 #include<apue.h> #include<fcntl.h> #define RWRWRW (S_IRU

unix环境高级编程笔记(5)—— 文件和目录(2)

1 文件截短 有时我们需要把文件尾端处截去一些数据以缩短文件,将一个文件清0是一个特例.在打开文件时使用O_TRUNC标志可以做到这一点. #include <unistd.h> int truncate(const char *pathname,off_t length); int ftruncate(int filedes,off_t length); 成功返回0,出错返回-1. 如果length 小于文件长度,则使文件长度截断至length,剩下的不可访问.如果length大于文件长度,

Unix环境之文件和目录

文件结构stat-- 下面三个函数可以获取文件的状态信息: #include <sys/stat.h> int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf); stat函数指定文件路径,fstat指定文件描述符,lstat类似于stat,但对于符号链接文件来说,lstat获取的是符号链接文件本

Unix高级环境编程学习笔记(二):文件和目录

1 stat,fstat,lstat函数 #include<sys/stat.h> int stat (const char* restrict pathname, struct stat *restrict buf); int fstat (int filedes, struct stat * buf); int lstat (const char* restrict pathname, struct stat *restrict buf); 成功返回0,失败返回-1 stat返回pathn