int main(int argc, char **argv)
{
int fd = open("test.txt", O_CREAT|O_RDWR, 0200|0400);
if(fd == -1)
{
printf("failure to oepn");
exit(-1);
}
int iRet = write(fd, "aaaaaaaaaa", 10);
if(iRet == -1)
{
printf("failure to writer");
exit(-1);
}
sleep(10);
printf("You must remove");
iRet = write(fd, "bbbbbbbbbb", 10);
if(iRet == -1)
{
printf("failure to after writer");
exit(-1);
}
exit(0);
}
睡眠(),刪除test.txt的,但過程中寫成功,爲什麼? 如果一個日誌爲「Singleton」實例,你刪除disk.write文件是成功的,但是你什麼也得不到。
class log
{
public:
void loggerWriter(std::string str);
int fd;
};
log::log(std::string filename):fd(-1)
{
fd = open(filename.c_str(), O_CREAT|)
//...
}
log::loggerWriter(std::string str)
{
writer(fd, str.c_str(), str.size());
}
int main()
{
log logger("text.txt");
//...
//I want to know the text.txt the text.txt have delete on the disk or not.
//if delete i can create another file to log.
}
「取消鏈接」無法解決此問題。
該文件存在,它只是使用刪除技巧來創建一個隱藏的臨時文件,在close()/ exit()上進行物理刪除。 – moshbear
沒有隱藏的臨時文件。有一個沒有名字的文件,並且其索引節點的引用計數爲!= 0. –
@MaximYegorushkin:磁盤上的inode有0個鏈接。內核上的inode有!= 0 refcount。如果系統崩潰,下次運行'fsck'時,它會注意到0 nlinks和dtime = 0並刪除文件。 – ninjalj