3 ms·
Interesting article but I can't reproduce the behavior on Ubuntu 16.01 LTS. I don't have TZ set (or anything locale-related for that matter). Here are the lib
by hodgesrm 10y ago
Interesting article but I can't reproduce the behavior on Ubuntu 16.01 LTS. I don't have TZ set (or anything locale-related for that matter). Here are the library dependencies:
$ ldd test
linux-vdso.so.1 => (0x00007ffd80baf000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8844bf7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8844fbc000)
Any thoughts why the behavior would be different?
- cnvogel 10y agoThere's also a surprising difference in behavior between tm = localtime() and localtime_r(..., &tm). The former is the "traditional" function which returns a pointer to a statically allocated, global "struct_tm". The latter is the thread-safe version receiving a pointer to a use-supplied "struct tm" as it's second argument. : do { : t = time(NULL); : localtime_r(&t, &tm); : printf("The time is now %02d:%02d:%02d.\n", : tm.tm_hour, tm.tm_min, tm.tm_sec); : sleep(1); : } while(--N); with TZ set to Europe/Berlin, set to :/etc/localtime, or unset I never get a stat on anything. write(1, "The time is now 07:23:33.\n", 26The time is now 07:23:33. ) = 26 nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffd9e798470) = 0 write(1, "The time is now 07:23:34.\n", 26The time is now 07:23:34. ) = 26 nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffd9e798470) = 0 write(1, "The time is now 07:23:35.\n", 26The time is now 07:23:35. ) = 26 nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffd9e798470) = 0 If I change it to tm = localtime()... stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2335, ...}) = 0 write(1, "The time is now 07:30:56.\n", 26The time is now 07:30:56.) = 26 nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffc868c3010) = 0 One more reason to switch to the reentrant/thread-safe versions of those ugly library functions :-). Note, this is using glibc 2.24 under Arch. $ /lib/libc.so.6 GNU C Library (GNU libc) stable release version 2.24, by Roland McGrath et al. (...) Compiled by GNU CC version 6.1.1 20160802.