struct timeval
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
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735