 
                            ...
Calling abort() causes abnormal program termination to occur unless the SIGABRT signal is caught and the signal handler calls exit() or _Exit().:
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| #include <stdlib.h>
/* ... */
if (/* something really bad happened */) {
  abort();
}
 | 
...
In this compliant solution, the call to abort() is replaced with exit(), which guarantees that buffered I/O data is flushed to the file descriptor and the file descriptor is properly closed.:
| Code Block | ||||
|---|---|---|---|---|
| 
 | ||||
| #include <stdlib.h>
#include <stdio.h>
int write_data(void) {
  const char *filename = "hello.txt";
  FILE *f = fopen(filename, "w");
  if (f == NULL) {
    /* Handle error */
  }
  fprintf(f, "Hello, World\n");
  /* ... */
  exit(EXIT_FAILURE); /* Writes data and closes f. */
  /* ... */
  return 0;
}
int main(void) {
  write_data();
  return EXIT_SUCCESS;
}
 | 
...