C で小さなプログラムを作成し、ファイルを正常に開き、20 秒間スリープを呼び出しました。その20秒で、シェルから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 バイトを読み取ると思っていましたが、実際のデータがファイルに出力されます。この動作の背後にある説明は何ですか。