mã:!Tại sao ghi vào bộ mô tả tệp sau khi tệp đích đã bị xóa thành công?
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);
}
trong giấc ngủ(), bạn xóa các test.txt, nhưng quá trình viết thành công tại sao? nếu một bản ghi "Singleton" thể hiện, bạn loại bỏ các tập tin trên disk.write là thành công, nhưng bạn có thể nhận được gì.
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.
}
"hủy liên kết" không thể giải quyết vấn đề này.
Tệp tồn tại, đó chỉ là mẹo xóa được sử dụng để tạo tệp tạm thời bị ẩn bị xóa trên thực tế (close /)(). – moshbear
Không có tệp tạm thời ẩn nào được thực hiện. Có một tệp không có tên, và có inode của nó với số tham chiếu! = 0. –
@MaximYegorushkin: inode trên đĩa có 0 nlink. Các inode trên hạt nhân có! = 0 refcount. Nếu hệ thống bị treo, lần sau 'fsck' chạy, nó sẽ thông báo 0 nlinks và dtime = 0 và xóa tệp. – ninjalj