mmapを使用して次の構成を試しました。
- ファイルを開く(ファイルが2 kBを超えている)
- ファイル*f_file*から統計を要求する
- マップファイル(ファイルはページよりも小さい、オフセットページ0、サイズは予想されるサイズ)
- マップ*f_fpage*の*f_footer*の値を確認します
- 使用法strdup
コード:
union{
...
struct {
char *f_fname;
struct clog_footer *f_footer;
char *f_fpage;
size_t f_size;
} f_ring; /* circular log file */
char *f_fname; /* Name use for Files|Pipes|TTYs. */
} f_un;
...
struct clog_footer {
uint32_t cf_magic;
};
...
1995 f->f_file = open(p+1, O_RDWR, 0 );
1996 if (f->f_file == -1) {
2000 }
2001 if (fstat(f->f_file,&sb)<0) {
2006 }
2014 f->f_un.f_ring.f_fpage = mmap(NULL,sb.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,f->f_file,0);
2015 if (f->f_un.f_ring.f_fpage == MAP_FAILED) {
2020 }
2021 f->f_un.f_ring.f_footer = (struct clog_footer*)(f->f_un.f_ring.f_fpage + sb.st_size-sizeof(struct clog_footer));
2022 if (memcmp(&(f->f_un.f_ring.f_footer->cf_magic),MAGIC_CONST,4)!=0) {
2029 }
2031 f->f_un.f_fname = strdup (p+1);
...
読み取り/書き込みを使用しましたが、ファイルは最大2Kbのゼロで埋められています。ファイルサイズとページサイズがゼロのmmapをパラメーター化しましたが、 mmapがファイルのマップに失敗します。
マップするファイルに追加のプロパティを含める必要がありますか?
ファイルを最初からマップしたい場合、「0」はmmapのオフセットとして許容できるパラメーターですか?