2016-09-17 8 views
1

У меня есть функция, как это:Я хотел бы получить время (CTIME (..)?) Файла на языке принимающей

void ft_display_time(struct timespec ttime) 
{ 
    char *time_long; 

    time_long = ctime(&ttime.tv_sec); 
    if (time_long) 
    { 
     ft_printf("%.3s ", time_long + 4); 
     ft_printf("%.2s ", time_long + 8); 
     ft_printf("%.5s ", time_long + 11); 
    } 
    else 
     ft_putstr("    "); 
} 

Я пытаюсь получить выход как ls -l делает. Но ctime(const time_t *clock) вернет строку на английском языке (так что месяца отображаются как «Дек» «Ян» «Авг» ...), а ls -l выводит месяцы в формате основного языка (в моем случае итальянский).

Пример:

./myprog --long file 
-rw-r--r-- 1 lotolo staff 0 Sep 17 19:55 c 

/bin/ls -l 
-rw-r--r-- 1 lotolo staff 0 17 Set 19:55 c 

Как я мог иметь выход в формате языка хоста?

Например, ttime равно stat.st_atimespec или stat.st_mtimespec возвращенного stat(filename, &stat) или lstat(filename, &stat) Я знаю, что я должен изменить большинство моих ft_display_time() Funtion, но я хотел бы знать, если есть способ получить ctime() выход в правильный язык.

+0

Вы пытались установить языковой стандарт с помощью 'setlocale (LC_ALL, NULL)' перед использованием процедур отображения строк? – Petesh

+0

Да! Я пробовал, но это не сработало ... – LotoLo

ответ

0

Scusa, но I не знаю, как это сделать, используя другую функцию ctime()-like. Если бы я тебя, хотя, я хотел бы попробовать другой подход:

Execute /bin/ls с execv(), так же, как и в How to list first level directories only in C? Для максимального удовольствия, объединить его с Redirecting exec output to a buffer or file.


Если вы хотите сделать универсальное изменение, то вы могли бы использовать то, что сказал Petesh:

setlocale(LC_ALL, NULL) 

, который, ссылаясь на ref, то:

Наборы информации о локализации, которые будут использоваться по текущей программе, либо изменяя всю локаль, либо ее части.

+0

Я не получаю связь между моим ответом и двумя ответами на два ... Я, должно быть, устал. В любом случае, я получаю setlocale (LC_ALL, NULL), я тестировал его, но он все еще выводится на английском языке ... Я diggin 'it – LotoLo

+0

@LotoLo, поскольку 'ls' дает вам то, что вы хотите, вы можете выполнить это вместо' CTime() '. Что касается 'setlocale()', я не могу думать ни о чем другом ...: / – gsamaras