/* Make sure we use the POSIX version of strerror_r() on Linux. */ #define _XOPEN_SOURCE 600 #include <pthread.h> #include <stdio.h> #include <errno.h> #include <string.h> void* thr2 ( void* v ) { char errstr[128]; FILE* f = fopen("bogus2", "r"); strerror_r(errno, errstr, sizeof(errstr)); printf("f = %ld, errno = %d (%s)\n", (long)f, errno, errstr); return NULL; } void* thr3 ( void* v ) { char errstr[128]; FILE* f = fopen("bogus3", "r"); strerror_r(errno, errstr, sizeof(errstr)); printf("f = %ld, errno = %d (%s)\n", (long)f, errno, errstr); return NULL; } int main ( void ) { char errstr[128]; FILE* f; pthread_t tid2, tid3; pthread_create(&tid2, NULL, &thr2, NULL); pthread_create(&tid3, NULL, &thr3, NULL); f = fopen("bogus", "r"); strerror_r(errno, errstr, sizeof(errstr)); printf("f = %ld, errno = %d (%s)\n", (long)f, errno, errstr); pthread_join(tid2, NULL); pthread_join(tid3, NULL); return 0; }