...
In this compliant solution, fseek()
is called in between the output and input, eliminating the undefined behavior.
Code Block | ||
---|---|---|
| ||
char data[BUFFERSIZE];
char append_data[BUFFERSIZE];
char *file_name;
FILE *file;
/* initialize file_name */
file = fopen(file_name, "a+");
if (file == NULL) {
/* Handle error */
}
/* Initialize append_data */
if (fwrite(append_data, BUFFERSIZE, 1, file) != BUFFERSIZE) {
/* Handle error */
}
if (fseek(file, 0L, SEEK_SET) != 0) {
/* Handle error */
}
if (fread(data, BUFFERSIZE, 1, file) != 0) {
/* Handle there not being data */
}
fclose(file);
|
...
In this compliant solution, the seekg()
member function is called in between the output and input, eliminating the undefined behavior.
Code Block | ||
---|---|---|
| ||
char data[BUFFERSIZE];
{
char data[BUFFERSIZE];
char append_data[BUFFERSIZE];
char *file_name;
* Initialize file_name and append_data */
fstream file( file_name, fstream::in | fstream::out | fstream::app);
file << append_data << ends;
file.seekg(0, ios::beg);
file >> data;
// ...
} /* File gets closed here */
|
...