diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/OR_USING_C/02.5.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/OR_USING_C/02.5.c')
-rw-r--r-- | reference/C/CONTRIB/OR_USING_C/02.5.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_USING_C/02.5.c b/reference/C/CONTRIB/OR_USING_C/02.5.c new file mode 100644 index 0000000..2b40798 --- /dev/null +++ b/reference/C/CONTRIB/OR_USING_C/02.5.c @@ -0,0 +1,69 @@ +/* + * + */ +#include <stdio.h> + +struct record { + int uid; + char login[9]; +}; + +char *logins[] = { "user1", "user2", "user3", + "user4", "user5" }; + +main() +{ + int i; + FILE *fp; + struct record rec; + + /* + * Open the data file for writing. + */ + if ((fp = fopen("datafile", "w")) == NULL) { + perror("datafile"); + exit(1); + } + + /* + * For each user, going backwards... + */ + for (i = 4; i >= 0; i--) { + /* + * Create the record. + */ + rec.uid = i; + strcpy(rec.login, logins[i]); + + /* + * Output the record. Notice we pass the + * address of the structure. + */ + putrec(fp, i, &rec); + } + + fclose(fp); + exit(0); +} + +/* + * putrec--write the record in the i'th position. + */ +putrec(fp, i, r) +int i; +FILE *fp; +struct record *r; +{ + /* + * Seek to the i'th position from the beginning + * of the file. + */ + fseek(fp, (long) i * sizeof(struct record), 0); + + /* + * Write the record. We want to write one + * object the size of a record structure. + */ + fwrite(r, sizeof(struct record), 1, fp); +} + |