2016-09-17 68 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

相关问题