unlink 函数的作用

1、unlink

运行一个程序时有时需要创建一些临时文件,如果进程运行过程中突然终止了,而临时文件还没来的及删除,那么就会遗留下很多没用的临时文件。unlink提供了解决这个问题的一种方法。创建一个临时文件后立刻调用unlink删除文件。但是进程还是打开该文件的,所以该临时文件内容依旧是能被访问的。但是进程终止后,该文件内容就会被删除。
当关闭一个文件时,内核首先检查打开该文件的进程,如果该数为0,然后检查其链接数,如果该数也是0,那么就删除该文件内容

  1 #include <stdio.h>
  2 #include <stddef.h>
  3 #include <sys/types.h>
  4 #include <sys/stat.h>
  5 #include <fcntl.h>
  6 #include <unistd.h>
  7 #include <stdlib.h>
  8
  9
 10 int main()
 11 {
 12     int fd;
 13     fd=open("temp",O_RDWR | O_CREAT |O_TRUNC,0666);
 14     if(fd==-1){
 15         perror("open error");
 16         exit(1);
 17     }
 18     sleep(5);
 19     unlink("temp");
 20     printf("unlink\n");
 21     sleep(5);
 22     char buf[20];
 23     if(write(fd,"aaaa",4)!=4){
 24         perror("write error");
 25         exit(1);
 26     }
 27     lseek(fd,0,SEEK_SET);
 28     if(read(fd,buf,4)==-1){
 29         perror("read error");
 30         exit(1);
 31     }
 32     buf[4]='\0';
 33     printf("read:%s\n",buf);
 34     return 0;
 35 }

2、关于文件节点的一些说明

Linux中文件是用inode节点来区分文件的,当我们删除一个文件的时候并不一定系统就会释放inode节点的内容。当满足下面的要求的时候系统才会释放inode节点的内容:
1、inode中记录指向该节点的硬链接数为0
2、没有进程打开指向该节点的文件
unlink函数的另一个用途就是用来创建临时文件,如果在程序中使用open创建了一个文件后,然后立即使用 unlink 函数删除文件,由于此时进程正在打开该文件,所以系统并不会释放该文件的 inode 节点,而只是删除其目录项。当进程退出时,该inode节点将会立即被释放。
临时文件可以用在进程间通信中的 有名管道 通信中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值