我想用宿主语言获取文件的时间(ctime(..)?)

时间:2016-09-17 18:23:42

标签: c linux io systems-programming 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" ...),而{{ 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 等于ttimestat.st_atimespec返回的stat.st_mtimespecstat(filename, &stat) 我知道我必须改变lstat(filename, &stat)函数的大部分内容,但我想知道是否有任何方法可以用正确的语言输出ft_display_time()

1 个答案:

答案 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,:

  

设置当前程序使用的区域设置信息,可以更改整个区域设置或部分区域设置。