microseconds.c: #include unsigned long current_microseconds(void) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return (unsigned long)(1e6*ts.tv_sec + ts.tv_nsec/1e3); } microseconds.scm: #> extern unsigned long current_microseconds(void); <# (define current-microseconds (foreign-lambda unsigned-long "current_microseconds")) bash: gcc -Wall -Wextra -O3 -pedantic -std=gnu99 -c microseconds.c csc -s microseconds.c microseconds.scm csi: #;1> (load "microseconds.so") ; loading microseconds.so ... #;2> (current-microseconds) 40677968507