Linux中unlink函数的使用
在进行unlink这个函数解释之前我们先通过一个测试进行unlink函数的功能的演示,通过程序的输出结果对unlink这个函数功能就大致明白了。
函数原型
int unlink(const char *pathname); //pathname 待删除的文件名
返回值
成功: 0
失败:-1
unlink函数测试
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
//int unlink(const char *pathname);
int fd = 0;
char w_buf[24] = "Hello Linux";
char r_buf[24];
fd = open("test.txt", O_RDWR | O_TRUNC | O_CREAT, 0664);
if(fd == -1)
{
printf("open [test.txt] error\r\n");
}
//先删除test.txt文件
if((unlink("test.txt")) == -1)
{
printf("unlink [test.txt] error\r\n");
}
//写入数据
write(fd,w_buf,sizeof(w_buf));
//将文件符一直开头
lseek(fd,0,SEEK_SET);
//进行数据的读取
memset(r_buf,'\0',sizeof(r_buf));
read(fd,r_buf,sizeof(r_buf));
//信息输出
printf("r_buf[%s]\r\n",r_buf);
return 0;
}
运行结果
unlink 函数使用总结
通过上述的结果可能大家看出来了,执行unlink()函数并不一定会真正的删除文件,它先会检查文件系统中此文件的连接数是否为1,如果不是1说明此文件还有其他链接对象,因此只对此文件的连接数进行减1操作。若连接数为1,并且在此时没有任何进程打开该文件,此内容才会真正地被删除掉。在有进程打开此文件的情况下,则暂时不会删除,直到所有打开该文件的进程都结束时文件就会被删除。这也是为什么在输出的结果中r_buf依然有数据。