Ich bin ein großer Puffer für die FILE*
Objekt (Größe von 8 * 1024
) und ich mache einen Schreibvorgang von 4 Bytes, und dann lese ich von der 4, aber die Lesen fehlgeschlagen. Wenn ich die FILE*
lösche, ist der Lesevorgang erfolgreich.fread() nach fwrite() bekommt 0 Bytes
typedef struct _MyFile { /* file descriptor */
unsigned char fileBuf[8*1024];
FILE *file;
} MyFile;
int main() {
MyFile myFile;
int res;
char bufWrite[4] = { 1, 2, 3, 4 };
char bufRead[4];
/* Open file for both reading and writing */
myFile.file = fopen("myfile.txt", "w");
/* Change the file internal buffer size */
setvbuf(myFile.file, myFile.fileBuf, _IOFBF, sizeof(myFile.fileBuf));
/* Write data to the file */
res = (int)fwrite(buf, 1, 4, myFile.file);
printf("write: res = %d\n", res);
/* Seek to the beginning of the file */
fseek(fp, SEEK_SET, 0);
/* Read and display data */
res = (int)fread(buf, 1, 4, myFile.file);
printf("read: res = %d\n", res);
fclose(myFile.file);
return 0;
}
Die Ausgabe lautet:
write: res = 4
read: res = 0
Wenn ich mehr als 8K schreiben oder write()
statt fwrite()
die fread()
funktioniert gut verwenden.
Die Sache ist, ich kann nicht verwenden fflush()
!!!
Gibt es eine Möglichkeit, es zu beheben?
haben Sie versucht, Ihre Datei im Lese-/Schreibmodus zu öffnen? 'fopen (" myfile.txt "," rw ");' –
Kann man nicht ungepufferte Anrufe ('open',' read', 'write') benutzen? –
@Eliand fopen ("myfile.txt", "w +"); sollte den Trick machen .. –