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节点将会立即被释放。
临时文件可以用在进程间通信中的 有名管道 通信中