我在C中寫了一個小程序,我成功地打開了一個文件,然後調用了睡眠20秒。在那20秒中,我從shell中使用rm刪除了打開的文件。睡眠後,程序成功讀取數據並將其打印在屏幕上。從已刪除的文件中讀取
int bytes_read;
FILE *fp = fopen("/tmp/file", "r");
sleep(20);
bytes_read = fread(buf, 1, 5, fp);
buf[bytes_read] = '\0';
printf("%s", buf);
我希望它讀取0字節,但它會在文件中打印實際數據。這種行爲背後的解釋是什麼。
磁盤上的數據沒有根除,只有inode被刪除。並且只有在文件上的所有打開的句柄都關閉之後。 –
如果文件被重命名,這也是真的嗎? – 0xhacker
原理相同。你已經打開了一個文件,操作系統不會將它從你的腳下拉開。 –