/* makebinfile.c - Reads a file containing a sequence of text records
* and writes it out to a new binary files.
* The names of the files are passed in as command
* line parameters.
*/
#include <stdio.h>
#define SIZE 10
#define NAMESIZE 25
typedef struct {
char name[NAMESIZE];
int midterm;
int final;
int homeworks;
} student;
int writeastudent(FILE *fdout, student * who){
/* Write to an open binary file fdout the content of who.
* Return the number of bytes that were written out.
*/
char * p; /* Cursor in outputting a byte at a time */
char * limit = ((char *)who)+sizeof(student); /*Address just past who */
for (p=(char *)who;p<limit;p++){
fputc(*p, fdout);
}
return (limit - (char *)who);
}
int main (int argc, char *argv[]){
int n = 0; /* Number of records read */
int m; /* Number of bytes in a record */
student who; /* Buffer for a record */
FILE *fdin; /* File descriptor for input file */
FILE *fdout; /* File descriptor for output file */
if(argc!=3){
printf("Usage: %s infile outfile\n", argv[0]);
exit(0);
}
if((fdin=fopen(argv[1],"r"))==NULL){
perror("fopen");
exit(1);
}
if((fdout=fopen(argv[2],"w"))==NULL){
perror("fopen");
exit(1);
}
while(fscanf(fdin,"%s %d %d %d",
who.name, &who.midterm, &who.final, &who.homeworks)!=EOF){
m = writeastudent(fdout, &who);
printf("m=%d\n", m);
n++;
}
printf("n=%d\n", n);
fclose(fdin);
fclose(fdout);
}
0 comments:
Post a Comment