我记得APUE上好像说过,文件被进程打开的情况下,它不会被立即删除,一直要到进程关闭这个文件后才会真正地被删除吧. 但是下面这段C代码的表现好像不太对啊
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#define CHECK(i) check(__LINE__,i)
void check(int iLine,int iRet)
{
if(iRet == -1)
{
printf("[line:%d]%d:%s\n",iLine,iRet,strerror(errno));
}
}
int main()
{
const char* tmpfile = "test.part";
const char* file = "test.full";
int fd = open(tmpfile,O_TRUNC|O_CREAT|O_WRONLY,S_IRWXU);
CHECK(fd);
sleep(10); // 这个时候确认test.part是存在的.
CHECK(unlink(tmpfile));
CHECK(write(fd,"HELLO",5));
fflush(stdout);
CHECK(link(tmpfile,file));
sleep(10); // 这个时候test.part就不见了,但是这个时候test.part还出于被打开的状态呀,为什么会这样?
close(fd);
return 0;
}
前面创建文件,删除文件,写入内容都没问题,后面的link操作会失败,提示"没有这个文件存在",然后我ls了一下,果然就不见了.
文件系统ext4