【问题标题】:I would like to obtain time (ctime(..)?) of a file in host language我想获取宿主语言文件的时间 (ctime(..)?)
【发布时间】:2017-01-25 18:59:24
【问题描述】:

我有这样的功能:

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) 返回的stat.st_atimespecstat.st_mtimespec 我知道我将不得不更改我的大部分ft_display_time() 功能,但我想知道是否有任何方法可以让ctime() 以正确的语言输出。

【问题讨论】:

  • 在使用字符串显示例程之前,您是否尝试使用setlocale(LC_ALL, NULL) 设置区域设置?
  • 是的!我试过了,但没用……

标签: c linux io systems-programming ctime


【解决方案1】:

Scusa,但不知道如何通过仅使用另一个类似ctime() 的函数来做到这一点。如果我是你,我会尝试不同的方法:

/bin/lsexecv() 一起执行,就像在How to list first level directories only in C? 中一样 为了获得最大的乐趣,请将其与Redirecting exec output to a buffer or file 结合使用。


如果你想做一个普遍的改变,那么你可以使用Petesh所说的:

setlocale(LC_ALL, NULL)

其中,引用ref,:

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

【讨论】:

  • 我的答案与前两个裁判之间没有联系......我一定很累。无论如何我得到了 setlocale(LC_ALL, NULL),我已经测试过了,但它仍然以英文输出......我正在挖掘它
  • @LotoLo 因为ls 给你你想要的,你可以执行它而不是ctime()。至于setlocale(),我想不出别的了……:/
猜你喜欢
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多