linux unlink函数作用,unlink函数的作用

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只是将文件的链接计数减一,至于文件内容删不删除则是情况而定(上面已经说明)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值