Greetings, Larry Hall (Cygwin)! >>>> This takes 7.1 seconds on my system, with a 12-line /etc/passwd file: >>>> >>>> #include <pwd.h> >>>> #include <stdio.h> >>>> #include <stdlib.h> >>>> >>>> int main(int argc, const char* argv[]) >>>> { >>>> int i; >>>> const char* user = argv[1]; >>>> >>>> if (!user) { >>>> printf("usage: %s username\n", argv[0]); >>>> exit(1); >>>> } >>>> >>>> for (i = 0; i < 1000000; ++i) { >>>> struct passwd* pw = getpwnam(user); >>>> if (!pw) { >>>> printf("User %s doesn't exist!\n", user); >>>> exit(2); >>>> } >>>> else if (i == 0) { >>>> printf("User %s is UID %d\n", user, pw->pw_uid); >>>> } >>>> } >>>> } >>>> >>>> So, each getpwnam() call takes 7.1 microseconds on average. >>> >>> I think you forgot to put an "exit(0);" after the last printf(). Without >>> it, you're checking for the same user a million times, which is certainly >>> going to take a little time. ;-) >>> >> >> I thought the point of the programme /was/ to call getpwnam() a million >> times. Time this as accurately as you can. Then, with a quick division, you >> get the time for one call.
> Hm, I missed that he summarized with _microseconds_, even though I quoted > that too in my response. :-( > My average was much closer to 2 microseconds per call but that could be > machine differences. > In any case, sorry for the noise. In either case, repeatedly requesting the same record in a short amount of time will only test the system level cache. -- WBR, Andrey Repin (anrdae...@yandex.ru) 08.02.2014, <04:39> Sorry for my terrible english... -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple