#define _GNU_SOURCE #include #include #include #include char *uid2name(int uid) /* returns the account name corresponding to uid; the name is valid until the next call to uid2name */ { static char *line = NULL; static size_t linesize = 0; FILE *passwd = fopen("/home/ep09/aufgabe/passwd","r"); if (passwd == NULL) { fprintf(stderr, "could not open passwd\n"); exit(1); } while (getline(&line, &linesize, passwd) != -1) { char *lname = strtok(line, ":"); char *luids; strtok(NULL, ":"); /* passwd field */ luids = strtok(NULL, ":"); if (strtol(luids, NULL, 10) == uid) { fclose(passwd); return lname; } } fclose(passwd); return "uid not found"; } int main() { char *uids = NULL; size_t uidsize = 0; struct mallinfo m; while (getline(&uids, &uidsize, stdin) != -1) { printf("%s\n", uid2name(strtol(uids, NULL, 10))); } /* Folgendes gibt nur den von malloc() verbrauchten Speicher aus. Wenn Ihr Programm nennenswerte Mengen an statisch allokiertem Speicher verwendet oder z.B. mit mmap einen Speicherbereich allokiert, in den es hineinschreibt (z.B. bei Verwendung von strtok), zaehlen Sie die entsprechenden Groessen bitte dazu und geben Sie die Summe aus. */ m = mallinfo(); fprintf(stderr,"%d\n",m.uordblks); exit(0); }