ページ 11

statを使ったプログラム

Posted: 2012年12月04日(火) 02:33
by もち

コード:

#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <time.h>

void main() {
  struct dirent *r_dir;
  struct stat *sta;

  DIR *dir = opendir(".");
  printf("--- この directory の内容を表示 ---\n");
  while((r_dir = readdir(dir)) != NULL) {
    if(r_dir->d_ino == 0) continue;
    printf(" i-node 番号:%ld, ファイル名:%s\n", r_dir->d_ino, r_dir->d_name);
  }
  printf("\n");
  closedir(dir);

  if(stat("r.c", sta) == 0) {
    printf("--- r.c の i-node 内容を表示 ---\n");
    printf(" i-node 番号:%ld\n", (long)sta->st_ino);
    printf(" アクセス/ファイル種別:%X\n", (int)sta->st_mode);
    printf(" 共有数:%d\n", (int)sta->st_nlink);
    printf(" 所有者 ID:%d\n", (int)sta->st_uid);
    printf(" グループ ID:%d\n", (int)sta->st_gid);
    printf(" ファイルサイズ:%ld\n", (long)sta->st_size);
    printf(" 最終アクセス秒:%ld\n", (long)sta->st_atime);
    printf(" 最終書き込み秒:%ld\n", (long)sta->st_mtime);
    printf(" 最終書き込み年月日時刻:%s",  ctime(&sta->st_mtime));
  }
}
カレントディレクトリの各ファイルとそのなかにあるr.cの
詳細を出力するプログラムです。
statでエラーが帰ってきてしまいます。どこがいけないんでしょうか・・・

Re: statを使ったプログラム

Posted: 2012年12月04日(火) 09:18
by h2so5
statの第二引数に渡すポインタは有効な領域を指している必要があります。
初期化されていないポインタを渡してはいけません。