D. J. Bernstein

The tai64n program

tai64n puts a precise timestamp on each line.


tai64n reads lines from stdin. For each line, it writes
  1. an @,
  2. a precise timestamp,
  3. a space, and
  4. a copy of the input line
to stdout. The timestamp indicates the moment that tai64n read the first character of the line.

tai64n exits 0 when it sees end of input. It exits 111 without an error message if it has trouble reading stdin or writing stdout.

tai64n does not allocate any memory after it starts.


Timestamps used by tai64n are 12-byte TAI64N labels in external TAI64N format, printed as 24 lowercase hexadecimal characters. You can use tai64nlocal to convert the timestamps to a human-readable format.

For example, the timestamp 4000000037c219bf2ef02e94 refers to the nanosecond beginning exactly 935467455.787492500 seconds after the beginning of 1970 TAI; 37c219bf hexadecimal is 935467455, and 2ef02e94 hexadecimal is 787492500.

The current implementation of tai64n relies on the UNIX gettimeofday library routine to return the current time as the number of TAI seconds since 1970-01-01 00:00:10 TAI. Beware that most gettimeofday implementations are not Y2038-compliant. Furthermore, most clocks are not set accurately.