Что не так с struct и mmap - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть структура tailq:

struct entry {
    int file;
    int *map;
    int pos;
    TAILQ_ENTRY(entry) tailq;         /* Tail queue. */
};

И к каждой записи в tailq у меня есть файл mmaped или желание:

#define NUMINTS  (1000)
#define FILESIZE (NUMINTS * sizeof(u_int64_t))

struct entry *np;
int result;

if((np = malloc(sizeof(struct entry))) == NULL){
    errx(1, "malloc");
}

np->file = open(temp, O_WRONLY | O_CREAT, (mode_t)0600);

if (np->file == -1) {
    errx(1, "Error opening file for writing");
}

np->map = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, np->file, 0);

if (np->map == MAP_FAILED) {
    close(np->file);
    errx(1, "Error mmapping the file");
}

TAILQ_INSERT_TAIL(&tailq_head[thread_id], np, tailq);

Я получаю «Ошибка при отображении файла», почему?

1 Ответ

1 голос
/ 17 февраля 2012

Вы открываете файл только для записи, а затем пытаетесь отобразить чтение / запись.Попробуйте открыть файл O_RDWR

...