On Fri, Jun 08, 2007 at 12:47:51PM +0200, Joern Wuestenfeld wrote: > Dear Pierre, > > unfortunately not, because it gives a reasonable result with libc 2.3.6: > > The following small test program: > > #include <sys/times.h> > #include <stdio.h> > #include <stdlib.h> > > int main(int argc, char **argv) > { > struct tms *buf; > int res; > > res = times(buf); > printf("%s%d%s%d\n","Return from times = ",res, " with a time = > ",buf- > >tms_utime); > exit(0); > } > > gives under libc.so.2.3.6: > > Using gcc (GCC) 4.1.3 20070601 (prerelease) (Debian 4.1.2-12) > > Return from times = -1 with a time = -1086733439 > > and under libc.so.2.5: > > Using gcc (GCC) 4.1.3 20070601 (prerelease) (Debian 4.1.2-12) > > Return from times = -891447083 with a time = 0 > > So whats wrong with the type?
Nothing. Just read the man page. RETURN VALUE times() returns the number of clock ticks that have elapsed since an arbitrary point in the past. For Linux 2.4 and earlier this point is the moment the system was booted. Since Linux 2.6, this point is (2^32/HZ) - 300 (i.e., about 429 million) seconds before system boot time. The return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set appropriately. this is clear, robust simple. with libc 2.3 it failed for some reason. Now it does *NOT* fails, gives you your _wrapped_ (see manpage) uptime, and user time of the calling process, that is 0 (and that's not a surprise as your example didn't run long enough). If you want ot test for error, you should test res against (clock_t)-1. negatives values are not an error and for any value != (clock_t)-1, the tms struct values can be trusted. full stop, just quoting the documentation. And if that breaks your oracle database or whatever, then the application is making false assertions about what times(3) does. -- ·O· Pierre Habouzit ··O [EMAIL PROTECTED] OOO http://www.madism.org
pgpFDDuvObokQ.pgp
Description: PGP signature