Chinaunix首页 | 论坛 | 博客

fx

  • 博客访问: 1347289
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3964
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-02 14:36
文章分类
文章存档

2022年(2)

2019年(2)

2018年(10)

2017年(1)

2016年(50)

2015年(12)

2014年(9)

2013年(29)

分类: C/C++

2013-05-14 21:21:41

int unlink(const char *pathname)

该函数用来删除pathname 指定的目录项,并将由pathname所引用的文件的链接数减一。但是文件的内容可能不会删除,如果此时有其他指向该文件的链接,则仍可通过其他链接访问文件。或是有进程打开了该文件,那么其内容也不会被删除
所以当关闭一个文件时,内核首先检查打开该文件的进程,如果该数为0,然后检查其链接数,如果该数也是0,那么就删除该文件内容。

我们运行一个程序时有时需要创建一些临时文件。如果进程运行过程中突然终止了,而临时文件还没来的及删除,那么就会遗留下很多没用的临时文件
unlink提供了解决这个问题的一种方法。创建一个临时文件后一刻调用unlink删除文件。但是进程还是打开该文件的,所以该临时文件内容依旧是能被访问的。但是进程
终止后,该文件内容就会被删除。
我们来做个测试
我们创建一个临时文件,然后调用unlink来删除该目录项。(我们在unink调用前后都睡眠5秒钟,好在中断用ls命令查看文件是否还存在)
 
  6 int main(void){
  7         int fd;
  8         fd=open("temp",O_RDWR | O_CREAT |O_TRUNC,0666);
  9         if(fd==-1){
 10                 perror("open error");
 11                 exit(1);
 12         }
 13 
 14         sleep(5);
 15         unlink("temp");
 16         printf("unlink\n");
 17         sleep(5);
 18         
 19         char buf[20];
 20         if(write(fd,"aaaa",4)!=4){
 21                 perror("write error");
 22                 exit(1);
 23         }
 24         lseek(fd,0,SEEK_SET);
 25         if(read(fd,buf,4)==-1){
 26                 
 27                 perror("read error");
 28                 exit(1);
 29         }
 30         buf[4]='\0';
 31         printf("read:%s\n",buf);
 32         
 33         exit(0);
 34 }


我们运行该程序:
feng@ubuntu:~/learn_linux_c_second/chapter_4$ ./a.out &
[1] 7557
feng@ubuntu:~/learn_linux_c_second/chapter_4$ ll temp
-rw-rw-r-- 1 feng feng 0 May 14 06:15 temp
feng@ubuntu:~/learn_linux_c_second/chapter_4$ unlink
ll temp
ls: cannot access temp: No such file or directory
feng@ubuntu:~/learn_linux_c_second/chapter_4$ read:aaaa


[1]+  Done                    ./a.out
feng@ubuntu:~/learn_linux_c_second/chapter_4$ 
后台运行该程序后,我们用 查看temp文件 发现被创建了。过几秒钟我们 再次用ll 命令查看该文件,显示已经没有该文件了
但是我们却还能向该文件写入数据,读出数据。这也验证了。unlink只是将文件的链接计数减一,至于文件内容删不删除则是情况而定(上面已经说明)
阅读(5936) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~