kaori と申します.

現在時刻をマイクロ秒まで表示するサンプルプログラムを以下のように
作成しました.
-------
#include <stdio.h>
#include <time.h>

int
main()
{
        struct timeval tv;
        struct tm *tmptr;

        gettimeofday(&tv, NULL);
        tmptr = localtime(&tv.tv_sec);

        printf("%04d/%02d/%02d %02d:%02d:%02d:%06d\n",
            tmptr->tm_year + 1900, tmptr->tm_mon + 1,
            tmptr->tm_mday, tmptr->tm_hour, 
            tmptr->tm_min, tmptr->tm_sec,
            tv.tv_usec);

        return 0;
}
-------
solaris 8 x86 の gcc 2.95.3 ではコンパイルできて,考えた通りの動
作をするのですが,red hat linux の gcc 3.2.2 では
        now_in_usec.c: 関数 `main' 内:
        now_in_usec.c:10: `tv' の領域サイズがわかりません
というエラーメッセージが出て,コンパイルできませんでした.

#include <time.h> を #include <sys/time.h>
に置き換えると
        now_in_usec.c: 関数 `main' 内:
        now_in_usec.c:14: 警告: 代入により、キャストなしで整数からポインタを作りました
        now_in_usec.c:17: 不完全型のポインタへの間接参照
        ......
というエラーメッセージが出て,コンパイルできませんでした.

良くわからなくなって,
#include <time.h>
#include <sys/time.h>
と2行とも書くと,コンパイルは正常に終了し,期待の動作をしました.
でも,2つとも include されているプログラム例をあまりみないので,
この解決方法で正しいのか,今一つ納得できません.

google で sys/time.h と time.h の違いに関してサーチしてみました
が,良くわかりません.gcc のバージョンによる違いなのか,OS によ
る違いなのか,原因がわからないので,情報へのポインタがあれば教え
てください.

-- 
                                 kaori@pu-toyama.ac.jp