#include #include #include void die(char *operation,char *why) { fprintf(stderr,"fatal: unable to %s file17.number: %s\n",operation,why); exit(111); } int readnumber(void) { FILE *f; int result; char throwaway; f = fopen("file17.number","r"); if (!f) { if (errno == ENOENT) return 0; die("read",strerror(errno)); } switch (fscanf(f,"%d",&result)) { case -1: if (ferror(f)) die("read",strerror(errno)); /* end of file; fall through to next case */ case 0: /* something non-numeric */ die("read","does not start with a number"); } switch (fscanf(f,"%c",&throwaway)) { case 1: die("read","has something after the number"); case -1: if (ferror(f)) die("read",strerror(errno)); } fclose(f); return result; } void writenumber(int result) { FILE *f = fopen("file17.number","w"); if (!f) die("write",strerror(errno)); if (fprintf(f,"%d",result) == -1) die("write",strerror(errno)); if (fflush(f) == -1) die("write",strerror(errno)); fclose(f); } int main(void) { int result = readnumber(); printf("Number of times I have been run: %d\n",++result); writenumber(result); return 0; }