C-即使在删除文件后仍读取文件内容
检查这个程序C-即使在删除文件后仍读取文件内容,c,C,检查这个程序 #include <stdio.h> int main() { FILE* f; char x[100]; f = fopen("a.txt","r"); int a = remove("a.txt"); sleep(5); fgets(x,100,f); printf("Remove() : %d\nFile Content : %s\n",a,x); printf("fclose() : %d
#include <stdio.h>
int main() {
FILE* f;
char x[100];
f = fopen("a.txt","r");
int a = remove("a.txt");
sleep(5);
fgets(x,100,f);
printf("Remove() : %d\nFile Content : %s\n",a,x);
printf("fclose() : %d\n",fclose(f));
return 0;
}
删除一个文件实际上并不一定要“删除”它。发生的事情是对文件的引用被破坏。这有点像指针。您可以将代码与此进行比较:
void delete(int ** ptr)
{
*ptr=NULL;
}
int main()
{
int a=5;
int p1=&a;
int p2=&a;
delete(p1); // Pretty much equivalent to deleting a file
printf("a: %d\n", *p1); // We can still access it through a another pointer
}
删除一个文件实际上并不一定要“删除”它。发生的事情是对文件的引用被破坏。这有点像指针。您可以将代码与此进行比较:
void delete(int ** ptr)
{
*ptr=NULL;
}
int main()
{
int a=5;
int p1=&a;
int p2=&a;
delete(p1); // Pretty much equivalent to deleting a file
printf("a: %d\n", *p1); // We can still access it through a another pointer
}
它依赖于操作系统/实现。在Linux上,文件实际上是“挂起删除”,这意味着由于文件被打开,内核在实际释放文件占用的空间之前“等待”文件被关闭 执行
lsof
(可能会延长睡眠时间
,让您有时间这样做)
显示您的程序进程维护打开的文件()。它取决于操作系统/实现。在Linux上,文件实际上是“挂起删除”,这意味着由于文件被打开,内核在实际释放文件占用的空间之前“等待”文件被关闭 执行
lsof
(可能会延长睡眠时间
,让您有时间这样做)
显示您的程序进程维护打开的文件()。因为所有数据都已加载到RAM上,所以删除文件不会引起任何问题~Read answer by Alexander Pavlov。。它说
fopen()
只创建文件的句柄。您的查询/问题是什么,您试图实现什么?只想知道为什么可以这样做。如果您想在读取或打开文件之前删除文件,您需要在打开
之前调用删除
。当前实现文件的内容已经在RAM中,因此其行为符合预期。因为所有数据都已加载到RAM中,所以删除文件不会造成任何问题~读取Alexander Pavlov的答案。。它说fopen()
只创建文件的句柄。您的查询/问题是什么,您试图实现什么?只想知道为什么可以这样做。如果您想在读取或打开文件之前删除文件,您需要在打开
之前调用删除
。当前实现文件的内容已经在RAM中,因此它的预期行为。
lsof | grep file