#define _GNU_SOURCE
#include <pthread.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>
struct tm tm = { 0, };
void *
thread_func()
{
char buf[256];
int n;
locale_t l;
l = newlocale(LC_ALL_MASK, "ko_KR.UTF-8", 0);
uselocale(l);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
uselocale(LC_GLOBAL_LOCALE);
freelocale(l);
}
int
main(int argc, char *argv[])
{
pthread_t t;
char buf[256];
int n;
setlocale(LC_ALL, "C");
pthread_create(&t, 0, thread_func, 0);
pthread_detach(t);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
sleep(1);
n = strftime(buf, 256, "%b %A %a", &tm);
buf[n] = '\0';
puts(buf);
}
실행해 보면 이렇게 두 개 스레드가 다른 로케일을 사용한다.
$ ./a.out
Jan Sunday Sun
1월 일요일 일
Jan Sunday Sun
1월 일요일 일
Jan Sunday Sun
1월 일요일 일
Jan Sunday Sun
댓글 없음:
댓글 쓰기
뜬금없이 문법 따위를 지적하거나, 오래된 글에 링크가 깨진 걸 지적하는 등의 의미 없는 댓글은 자제해 주시기 바랍니다. 그러한 경우 답 없이 삭제합니다. 또한 이해 당사자이신 경우 숨어서 옹호하지 마시고 당사자임을 밝히시길 바랍니다.
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.