2015-01-09 16 views
5

Tôi đang sửa một số mã Linux sử dụng strerror (không an toàn chỉ luồng) để đa luồng. Tôi thấy rằng strerror_rstrerror_l đều vừa an toàn. Do các định nghĩa khác nhau cho strerror_r (tùy thuộc vào _GNU_SOURCE nó được định nghĩa khác) Tôi muốn sử dụng chức năng strerror_l mới hơn, nhưng làm thế nào để tôi có được đối tượng locale_t cho ngôn ngữ hiện tại? Tôi không sử dụng iconv hoặc bất cứ thứ gì, chỉ đơn giản là libc, và tôi không thấy làm thế nào tôi có thể có được một đối tượng "locale mặc định" (tôi không quan tâm đến ngôn ngữ lỗi được in, tôi chỉ muốn một chuỗi có thể đọc được con người .)Làm thế nào để sử dụng strerror_l với ngôn ngữ hiện tại?

Trả lời

0

Nếu bạn vượt qua "" vào tham số locale newlocale sẽ phân bổ một đối tượng địa phương thiết lập để các địa phương có nguồn gốc hiện nay [1]

[1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/newlocale.html

static locale_t locale; 
    bool MyStrerrorInit(void) 
    { 
     locale = newlocale(LC_CTYPE_MASK|LC_NUMERIC_MASK|LC_TIME_MASK| 
        LC_COLLATE_MASK|LC_MONETARY_MASK|LC_MESSAGES_MASK, 
        "",(locale_t)0); 

     if (locale == (locale_t)0) { 
      return false; 
     } 

     return true; 
    } 

    char * MyStrerror(int error) 
    { 
     return strerror_l(error, locale); 
    } 
Các vấn đề liên quan