2016-09-17 7 views
1

私はこのような機能を持っている(CTIME(..)を?):私はls -lのような出力がありません取得しようとしている私は時間取得したい

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("    "); 
} 

を。しかし、ctime(const time_t *clock)は英語で文字列を返します(月は "12月" "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は私が私のft_display_time()目的球のほとんどを変更する必要があります知っているstat.st_atimespecまたはstat(filename, &stat)またはlstat(filename, &stat) によって返さstat.st_mtimespecに等しいですが、私はctime()出力を得るためのどのような方法があるかどうかを知りたいです正しい言語。

+0

文字列表示ルーチンを使用する前に 'setlocale(LC_ALL、NULL)'を使用してロケールを設定しようとしましたか? – Petesh

+0

はい!私は試しましたが、うまくいきませんでした... – LotoLo

答えて

0

Scusaしかし、Ictime()のような機能のみを使用してこれを行う方法はわかりません。私もあなただったら、私は別のアプローチをしようとするだろう:

execv()/bin/lsを実行し、ちょうどRedirecting exec output to a buffer or fileとそれを組み合わせると、最大の喜びのためにHow to list first level directories only in C?に好きです。


あなたはユニバーサル変更を行いたい場合は、あなたがPeteshが言ったことを使用することができます

refを引用し、
setlocale(LC_ALL, NULL) 

を、:

セットが使用する情報をロケール現在のプログラムによって、ロケール全体またはロケールの一部が変更されます。

+0

私は私の答えと最初の2つの参考文献との間の接続を得ていません...私は疲れている必要があります。とにかく私はsetlocale(LC_ALL、NULL)を取得しましたが、テストしましたが、まだ英語で出力されています...私はそれをdiggin ' – LotoLo

+0

@LotoLo 'ls'は、 ctime() ' 'setlocale()'に関しては、私は他の何も考えることができません...:/ – gsamaras

関連する問題