The time function in time.h gives milliseconds since the epoch.
This is a simple way:
time_t seconds_since_midnight = time(NULL) % 86400;
To get approximate milliseconds since midnight, multiply seconds_since_midnight by 1000.
If you need more resolution (consider whether you really do), you will have to use another function such as gettimeofday().
You use gettimeofday(2) which is defined in POSIX.1 and BSD.
It returns seconds and microseconds as defined in struct timeval from sys/time.h.
Take a look at gmtime() Converts directly to Coordinated Universal Time (UTC)...
You will find C code examples for getting time and converting it to various formats here.
This is the precise way:
struct timeval tv;
int msec = -1;
if (gettimeofday(&tv, NULL) == 0)
{
msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
}
That will store into msec the number of milliseconds since midnight.
(Or -1 if there was an error getting the time.)
Although it's usually a bad idea to store time-values in an int, I'm being a little cavalier and assuming int is at least 32-bit, and can easily accommodate the range (-1) to 86,400,000.
But I don't know if it's worth all the effort.