004link()unlink()_LINUX

article/2025/9/14 6:40:56

Linux的学习笔记

  • link、unlink
    • 1. 共享盘块
    • 2. link() 为已经存在的文件创建目录项(硬链接)
      • 头文件包含和函数声明
    • 3. unlink() 删除一个文件的目录项
      • 头文件包含和函数声明
      • Linux下删除文件的机制:
      • demo
    • 4. unlink 使用注意及隐性回收
      • demo
        • 4.1 编译后运行,发生阻塞,并生成 temp.txt 文件,成功!
        • 4.2 加入段错误后,在进行编译,运行
        • 4.3 将 unlink 提前到最前面,出现段错误,但是 temp.txt 被干掉了
    • 5. 隐式回收(隐式回收系统资源)
    • 6. readlink 读符号链接本身内容,得到链接所指向的文件名
      • 头文件包含及函数声明

link、unlink

1. 共享盘块


在 Linux 系统中,目录项游离于 inode 之外,文件名与 inode 并存于 dentry 中。
其目的为了实现文件共享。Linux 允许多个目录项共享一个 inode,即共享盘块(data)。不同文件名,但在内核中其实是一个文件。

2. link() 为已经存在的文件创建目录项(硬链接)

头文件包含和函数声明

man 2 link

#include<unistd.h>int link(const char* oldpath, const char* newpath);

返回值:

  • 成功:0
  • 失败:-1,errno
ln t.c t.hard	# 创建硬链接

3. unlink() 删除一个文件的目录项

头文件包含和函数声明

#include<unistd.h>int unlink(const char* pathname);

Linux下删除文件的机制:

  • 不断将 st_nlink - 1, 直到减到0为止。无目录项对应的文件,将会被操作系统择机释放。(具体时间由系统内部调度算法决定)

  • 文件被删除,只是让文件具备勒被释放的条件

demo

/* 给硬链接改名,创建一个,删除原来的 */
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<errno.h>int main(int argc, char * argv [ ])
{link(argv[1], argv[2]);unlink(argv[1]);return 0;
}

4. unlink 使用注意及隐性回收

由于 Linux 的删除文件机制,若使用 unlink 将文件的硬链接减到0了,没有 dentry 对应,但文件不会马上被释放掉。要等到所有打开该文件的进程关闭该文件,系统才会挑时间将文件释放

demo

`#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>int main(void)
{int fd;char* p = "test of unlink\n";char* p2 = "after write something.\n";fd = open("temp.txt",O_RDWR|O_CREAT|O_TRUNC, 0644);if (fd < 0){perror("open temp error");exit(1);}int ret = write(fd, p, strlen(p));if (ret == -1){perror("----write error");}printf("hi! I'm printf\n");ret = write(fd, p2, strlen(p2));if (ret == -1){printf("----write error");}printf("Enter anykey continue\n");getchar();close(fd);ret = unlink("temp.txt");if (ret < 0){perror("unlink error");exit(1);}
}

4.1 编译后运行,发生阻塞,并生成 temp.txt 文件,成功!


程序运行期间 temp.txt 存在,程序运行结束,文件被干掉

4.2 加入段错误后,在进行编译,运行


发生段错误, temp.txt 没有被干掉

4.3 将 unlink 提前到最前面,出现段错误,但是 temp.txt 被干掉了

发生段错误后,close(fd)并未运行,程序运行结束,系统自动关闭

5. 隐式回收(隐式回收系统资源)

当进程结束运行,所有该进程打开的文件会被关闭,申请的内存空间会被释放。系统这一特性称为隐式回收系统资源

6. readlink 读符号链接本身内容,得到链接所指向的文件名

头文件包含及函数声明

man 2 readlink

#include<fcntl.h>
#include<unistd.h>ssize_t readlink(const char* path, char *buf,size_t bufsize)


http://chatgpt.dhexx.cn/article/FkXT5nqY.shtml

相关文章

CTF PWN之heap入门 unlink

环境 ubuntu20 pwndbg patchelf glibc-all-in-one 为什么要用ubuntu不用kali&#xff0c;这里不做解释&#xff0c;总之就是自己在搭环境时出现了各种问题&#xff0c;但用ubuntu20不会出现&#xff0c; pwndbg&#xff0c;打pwn题必备&#xff0c;具体安装过程见gdb与ped…

NPM报错 Error: EPERM: operation not permitted, unlink......解决办法和清除缓存。

由于国内外环境因素&#xff0c;npm install安装依赖的时候经常会出现各种问题&#xff0c;特别是“Error: EPERM: operation not permitted, unlink…”这个错误。 在这里插入图片描述 这个错误因为报错信息的误导性&#xff0c;导致很多网上提出的解决办法都是什么设置权限…

vue 启项目报错Error: EPERM: operation not permitted, unlink

使用npm install安装依赖之后&#xff0c;有时候存在网络或其他问题安装不上个别依赖&#xff0c;其项目失败&#xff0c;报错 当启项目时报错&#xff1a;Error: EPERM: operation not permitted, unlink 此问题困扰好久&#xff0c;刚开始以为和其他人遇到的问题相似是因为管…

好好说话之unlink

堆溢出的第三部分unlink&#xff0c;这可能是有史以来我做的讲解图最多的一篇文章了累死 。可能做pwn的人都应该听过unlink&#xff0c;见面都要说声久仰久仰。学unlink的时候走了一些弯路&#xff0c;也是遇到了很多困扰的问题&#xff0c;会在后面的内容中做出标注。由于写的…

Unlink

Author&#xff1a;ZERO-A-ONEDate&#xff1a;2021-07-03 一、unlink的原理 简介&#xff1a;俗称脱链&#xff0c;就是将链表头处的free堆块unsorted bin中脱离出来然后和物理地址相邻的新free的堆块合并成大堆块&#xff08;向前合并或者向后合并&#xff09;&#xff0c;再…

unlink快速入门

0x01 正常unlink 当一个bin从记录bin的双向链表中被取下时&#xff0c;会触发unlink。常见的比如&#xff1a;相邻空闲bin进行合并&#xff0c;malloc_consolidate时。unlink的过程如下图所示&#xff08;来自CTFWIKI&#xff09;主要包含3个步骤&#xff0c;就是这么简单。 …

Linux常用命令——unlink命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) unlink 系统调用函数unlink去删除指定的文件 补充说明 unlink命令用于系统调用函数unlink去删除指定的文件。和rm命令作用一样&#xff0c;都是删除文件。 语法 unlink(选项)(参数)选项 --help&#xff1a;…

element table表格,动态生成表头,基于可拖拽组件,拖动排序

效果展示 使用步骤 所需页面根据解释粘入 表格页面(父组件).txt 中代码&#xff0c; 引入dragList.vue组件 1.表格页面(父组件) <dragList radio"ssss" ></dragList> //引用子组件<el-tablev-if"asa":data"tableData"ro…

vue-draggable的多列拖动与拷贝拖拽(不删除源数据列)

vue-draggable的多列拖动与拷贝拖拽&#xff08;不删除源数据列&#xff09; Demo所用属性所遇困难源码 Demo 官方文档 录屏软件&#xff1a;screenToGif (将视频转为Gif&#xff0c;我认为简单又好操作) 我深知&#xff0c;文字的感知不如图片&#xff0c;图片的感知不如视频…

【JavaScript】列表拖拽升级,支持双击添加和时间轴左右拖动

TOC H5实现时间揍拖动 实现双击文件列表的项添加到时间揍的最后一条。 时间轴里可以左右拖动位置。 主要代码&#xff1a; /*** 时间轴拖动结束* param $event* constructor*/ const lineDragEnd ( $event ) > {console.log( 时间轴拖动结束 , $event )console.log(移动了,…

echarts拖拽echarts实现多条可拖动节点的折线图

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="js/echarts/echarts.js"></script> <title>在指定位置画多个点</title> <style> …

html拖拽页面特效,div+css实现网页模块或栏目拖动(即拖拽效果)

//为Number增加一个属性,判断当前数据类型是否是数字 Number.prototype.NaN0function(){return isNaN(this)?0:this;} //全局变量 var iMouseDownfalse; var dragObjectnull; //获得鼠标的偏移量(对象2-对象1) function getMouseOffset(target,ev) { evev||window.event; var …

RecyclerView实现Item可拖拽(拖动、删除)

RecyclerView实现Item可拖拽&#xff08;拖动、删除&#xff09; 话不多说&#xff0c;先附上效果图&#xff1a; ItemTouchHelper 这是一个RecyclerView的工具&#xff0c;提供了drag & swipe 的功能&#xff0c;可以帮助我们处理RecyclerView中的Item的拖拽和滑动事件…

原生drag拖拽后元素过大,挡住其他可拖动位置无法拖动问题

写一个蒙层&#xff0c;还未拖动前原始层在上面&#xff0c; 拖动那过程中&#xff08;dragover&#xff09;原始层在下面&#xff0c; 拖进目标元素后&#xff08;drop&#xff09;&#xff0c;此时蒙层在上面&#xff0c;根据drop的$event获取落在蒙层哪个div上&#xff0c…

html5播放器禁止拖拽功能实例(教学内容禁止拖动观看)

html5播放器禁止拖拽功能实例&#xff08;常用于场景&#xff1a;企业培训、在线教学内容禁止学员拖动视频进行观看&#xff09; 实例1&#xff1a;参数开启后&#xff0c;视频教学内容或视频课件将不允许拖动进度条。 <div id"player"></div> <scr…

html5播放器禁止拖拽、视频禁止拖动的实例

阿酷TONY / 2023-3-8 / 长沙 html5播放器禁止拖拽功能,常用于场景&#xff1a;企业培训、在线教学内容禁止学员拖动视频进行观看。 应用代码实例&#xff1a; <div id"player"></div> <script src"//player.polyv.net/script/player.js">…

WPF TreeView拖动排序拖拽排列

底部附有Demo示例。需要的朋友可以去下载参考 一、图示 先上图&#xff0c;不知为啥&#xff0c;GIF总看起来特别卡&#xff0c;实际却很流畅。 由于录制问题&#xff0c;GIF动画只会播放一次&#xff0c;需要重复观看的&#xff0c;请将网页关闭后重新打开再观看 WPF的资料…

js原生拖拽的两种方法

一.mousedown、mousemove和mouseup 拖着目标元素在页面任意位置 如果要设置物体拖拽&#xff0c;那么必须使用三个事件&#xff0c;并且这三个事件的使用顺序不能颠倒。 1.onmousedown&#xff1a;鼠标按下事件 2.onmousemove&#xff1a;鼠标移动事件 3.onmouseup&#xff…

前端原生拖拽(drag drop)的一点小总结

新工作中&#xff0c;第一个手生的功能&#xff0c;遇到了很多诡异的问题&#xff0c;今天终于解惑了。最终原因还是对代码没有透彻的了解&#xff0c;jquery的运用也不熟练导致的。稍稍的记录一下。 原始功能 对项目列表中的元素进行拖拽&#xff0c;拖拽到一定的位置&#xf…

Vue2 _ 实现拖拽功能

老项目重构&#xff0c;其中有一些拖拽功能&#xff0c;不过用的是两个开源 JS 拖拽文件实现的效果&#xff0c;版本太老了&#xff0c;所以需要换代了&#xff0c;然后就查阅了能够用 Vue 来简单快速实现拖拽的功能实现方法 &#xff1a; 目录 一、HTML 拖放 二、Vue.Dragg…