Ich kann nicht verstehen, wie EOF funktioniert und WIE kennt mein PC die Größe einer Datei.Gleiche Datei mit unterschiedlicher Größe fprintf auf Linux
Zum Beispiel habe ich 3 Dateien, test0, test1 und test2. I erstellt TEST0 und test1 auf diese Weise:
int main(void) {
/* */
FILE* fp0 = fopen("/home/kevin/eclipse-workspaceC/FileMangment/src/test0", "w+");
FILE* fp1 = fopen("/home/kevin/eclipse-workspaceC/FileMangment/src/test1", "w+");
if (!fp0 || !fp1) {
fprintf(stderr, "file pointer points to NULL\n");
return 1;
}
fprintf(fp0, "abcd");
fprintf(fp1, "abcd\n");
fclose(fp0);
fclose(fp1);
return 0;
}
Dann habe ich test2 mit der rechten Maustaste -> neue Dokumente und in der Datei schrieb ich:
abcd
Ohne einen Raum noch eine neue Zeile Am Ende. Dann auf der bash lief ich den Befehl: wc -c test*; file test*
und die Ausgabe:
4 test0
5 test1
5 test2
14 total
test0: ASCII text, with no line terminators
test1: ASCII text
test2: ASCII text
Wenn ich die Dateien mit gedit beobachten sie (keine neue Linien gegründet) identisch zu sein scheinen.
Ich weiß, dass \n
Newline ist und nicht EOF (Und ich kann wirklich nicht verstehen, was ist das EOF), also WIE weiß mein PC, wenn die Datei endet? Wenn die Größe des Festplattenblocks 4K ist, warum stoppt es dann nach der korrekten Anzahl von Bytes und liest nicht weiter, was danach kommt?
Warum sehe ich Tonnen von Codes, die eine Datei auf diese Weise analysiert:
while((c=fgetc(infile))!=EOF){
putchar(c);
}
Dies bedeutet also, dass es irgendwo ein Zeichen genannt (EOF) ??????? Aber ich kann es nicht in Ascii Tabelle finden. Und ich fand, dass Wert -1 ist .... Sehr sehr sehr verwirrend ...
Ist mein PC, der jede Datei analysiert, um zu wissen, ist Größe oder es irgendwo geschrieben?
Irgendwo in meinem Computer muss das sein:
your file at position xyz has the size of blahblah...
Wo ist dieser Ort? oder was soll ich googlen? Weil ich etwas wie 3Gozzilion von Dingen gegooglet habe wie: wo ist meine Dateigröße gespeichert usw. ... und habe nichts gefunden. Ich möchte nur wissen, wo diese Informationen gespeichert sind.
Die Dateiinformationen im Dateisystem haben die tatsächliche Größe der Datei (verwendete Bytes). Die E/A-Bibliothek und/oder das Betriebssystem verwenden dies, um zu begrenzen, was Sie aus der Datei lesen können. –
Es gibt kein Zeichen, das ein'EOF' ist. 'fgetc' gibt kein' char' zurück. Es gibt ein Zeichen zurück, das am Ende der Datei zu "int" oder "EOF" hochgestuft wird. – MFisherKDX
"WIE weiß mein PC, wann die Datei endet?" Die Dateilänge, Erstellungs-/Änderungszeitpunkt, Dateiname usw. werden an anderer Stelle gespeichert. Diese Metadaten werden oft im Ordner/Verzeichnis gespeichert. – chux