0xh*_*ker 1 c linux filesystems file libc
我在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);
Run Code Online (Sandbox Code Playgroud)
我希望它读取0个字节,但它会在文件中打印实际数据.这种行为背后的解释是什么?
Jen*_*edt 11
在linux和其他POSIX系统中,您不会删除文件.您只需从目录中删除inode.只要在文件上打开文件描述符,就不会删除它.只有当inode的最后一个链接和最后一个打开的文件描述符消失时.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |