mmap ломается после strdup - PullRequest
       18

mmap ломается после strdup

1 голос
/ 20 декабря 2011

Я попробовал следующую конфигурацию с mmap:

  1. открыть файл (размер файла превышает 2 КБ)
  2. запросить статистику из файла * f_file *
  3. файл карты(файл меньше страницы, смещение страницы 0, размер - ожидаемый размер)
  4. проверка значений * f_footer * на карте * f_fpage *
  5. использование 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);
...

Я использовал чтение / запись, файл заполнен нулями до 2 Кб.Я параметризовал mmap размером файла и нулевым размером страницы, но mmap не удается отобразить файл.

Должен ли файл к карте иметь дополнительные свойства?

Является ли "0" приемлемым параметром в качестве смещения в mmap, если я хочу отобразить файл с начала?

...