/* Tickler Code related to file operations. */ #include /* FILE, fopen(), fclose() */ /* printf(), fprintf() */ /* scanf(), fscanf() */ #include /* EXIT_SUCCESS, EXIT_FAILURE, exit() */ #include /* INT_MAX */ #include /* sin() */ #define FALSE (0) #define TRUE (!FALSE) #define READ (0) #define WRITE (1) #define TEXT (0) #define BINARY (1) #define PI (3.141592654) #define FREQUENCY (1.0) #define SAMPLESperSEC (20.0) #define SAMPLES (20) FILE *OpenFile(char *filename, int mode, int type) { char modestr[3]; switch (mode) { case READ : modestr[0] = 'r'; break; case WRITE: modestr[0] = 'w'; break; } switch (type) { case TEXT : modestr[1] = 't'; break; case BINARY: modestr[1] = 'b'; break; } modestr[2] = '\0'; return fopen(filename, modestr); } int main(void) { FILE *fp, *fp2; char *filename; double freq_Hz; int v; double time, value; long int pos; long int sample; filename = "sine.txt"; if (NULL == (fp = OpenFile(filename, WRITE, TEXT))) { printf("Failed to open file <%s>\n", filename); exit(EXIT_FAILURE); } /* WRITING SINUSOID TO TEXT FILE */ freq_Hz = FREQUENCY; for (sample = 0; sample < SAMPLES; sample++) { time = (double) sample / SAMPLESperSEC; value = sin(2.0*PI*freq_Hz*time); v = INT_MAX * value; fprintf(fp, "%i\n", v); } fclose(fp); filename = "sine.txt"; if (NULL == (fp = OpenFile(filename, READ, TEXT))) { printf("Failed to open file <%s>\n",filename); exit(EXIT_FAILURE); } filename = "sine.bin"; if (NULL == (fp2 = OpenFile(filename, WRITE, BINARY))) { printf("Failed to open file <%s>\n",filename); exit(EXIT_FAILURE); } if (1 == fscanf(fp, "%i", &v)) { do { fwrite(&v, sizeof(int), 1, fp2); } while (1 == fscanf(fp, "%i", &v)); } fclose(fp); fclose(fp2); filename = "sine.bin"; if (NULL == (fp2 = OpenFile(filename, READ, BINARY))) { printf("Failed to open file <%s>\n",filename); exit(EXIT_FAILURE); } fseek(fp2, 0, SEEK_END); pos = ftell(fp2); printf("The file contains %li bytes.\n", pos); pos /= sizeof(int); printf("The file contains %li values.\n", pos); fseek(fp2, 0, SEEK_SET); for (sample = 0; sample < pos; sample++) { fread(&v, sizeof(int), 1, fp2); printf("Sample %04li: %+06i\n", sample, v); } fclose(fp2); return EXIT_SUCCESS; }