我有这样的功能:
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" ...),而{{ 1}}以宿主语言格式输出月份(在我的意大利语中)。
示例:
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()
。
答案 0 :(得分:0)
Scusa,但是我不知道通过使用另一个ctime()
类似函数来实现此目的的方法。如果我是你,我会尝试不同的方法:
使用execv()执行/bin/ls
,就像在How to list first level directories only in C?中一样。为了获得最大乐趣,请将其与Redirecting exec output to a buffer or file结合使用。
如果你想做一个普遍的改变,那么你可以使用Petesh所说的:
setlocale(LC_ALL, NULL)
,引用ref,:
设置当前程序使用的区域设置信息,可以更改整个区域设置或部分区域设置。