2016-09-17 65 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)將返回一個英文字符串(所以月份顯示爲「Dec」「Jan」「Aug」...),而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(filename, &stat)lstat(filename, &stat) 我知道我將不得不改變我的大部分ft_display_time() funtion的返回stat.st_atimespecstat.st_mtimespec,但我想知道是否有越來越ctime()輸出中的任何方式正確的語言。

+0

您是否嘗試在使用字符串顯示例程之前使用'setlocale(LC_ALL,NULL)'設置語言環境? – Petesh

+0

是的!我嘗試過,但沒有奏效...... – LotoLo

回答

0

Scusa,但不知道通過僅使用另一個ctime()功能來做到這一點的方法。如果我是你,雖然,我會嘗試不同的方法:

How to list first level directories only in C?執行/bin/lsexecv(),就像爲了獲得最大的快感,與Redirecting exec output to a buffer or file結合起來。


如果你想要做一個通用的變化,那麼你可以使用什麼Petesh說:

setlocale(LC_ALL, NULL) 

其中,引述ref,:

設置場景信息使用通過當前的程序,或者改變整個地區或部分地區。

+0

我沒有得到我的答案和第一個兩位裁判之間的聯繫......我一定很累。無論如何,我得到setlocale(LC_ALL,NULL),我測試過它,但它仍然輸出英語...我diggin'它 – LotoLo

+0

@LotoLo因爲'ls'給你你想要的,你可以執行,而不是'的ctime()'。至於'setlocale()',我想不出別的什麼......:/ – gsamaras

相關問題