mmap在strdup之后破坏

时间:2011-12-20 15:11:39

标签: mmap strdup

我尝试使用mmap进行以下配置:

  1. 打开文件(文件超过2 kB)
  2. 从文件* f_file *
  3. 请求统计信息
  4. 地图文件(文件小于页面,偏移页面0,大小是预期大小)
  5. 在地图* f_fpage *
  6. 中验证* f_footer *的值
  7. usage strdup
  8. 代码:

    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);
    ...
    

    我使用了读/写,文件填充零到2 Kb。我使用文件大小和零页面大小参数化 mmap ,但 mmap 无法映射文件。

    要映射的文件是否应具有其他属性?

    一旦我想从头开始映射文件,“0”是否可接受参数作为mmap中的偏移量?

0 个答案:

没有答案