Search code examples
csleepc11

sleep function in C11


I want to sleep in a C11 program. Neither usleep (in unistd.h) nor nanosleep (in time.h) are declared with the -std=c11 option of both gcc (4.8.2) and clang (3.2).

A grep sleep /usr/include/*.h doesn't reveal any other likely sleep candidates.

I need a sleep with at least millisecond precision.

How do I sleep in C11?


Solution

  • Use -std=gnu11 instead of -std=c11 (this works for both clang and gcc). This will cause the <time.h> header to define nanosleep.

    Another alternative to nanosleep, calling pselect on a null file descriptor with a timeout, also only works with -std=gnu11 and not -std=c11

    For an example of both:

    #include <stdio.h>
    #include <sys/select.h>
    
    int main()  // Compile with -std=gnu11 (and not -std=c11)
    {
       struct timespec ts1 = {
           .tv_sec = 0,
           .tv_nsec = 500*1000*1000
       };
       printf("first\n");
       nanosleep(&ts1, NULL);
       printf("second\n");
       pselect(0, NULL, NULL, NULL, &ts1, NULL);
       printf("third\n");
    }