2014-10-04 1 views
2

Для проекта я должен сделать, я должен использовать:Использование ММАП() для отображения нескольких процессов совместно область памяти

void *ptr = mmap(NULL, N, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, 0, 0);

где N это число байтов памяти, чтобы попросить от ОС.

Когда этот оператор выполняет, то, что ptr указывает на? Указывает ли он на начало разделяемой памяти между процессами? Кроме того, если в этом ящике памяти я хочу сохранить указатели 1000 int, мне нужно иметь N = 1000 * sizeof(int *);?

И если предположить, что я прав, где второе место в памяти, что я могу что-то хранить? Является ли оно ptr + 1 или ptr + 4, потому что int * составляет 4 байта в 32-битной системе?

Спасибо, я ценю это.

+0

Да, да и на '((INT *) PTR) [1]' (что эквивалентно '* (((INT *) PTR) + 1)') –

+1

Вы уверены, что хотите 'mmap()' стандартный поток io? Я бы рекомендовал 'mmap (NULL, N, flags, flags, -1, 0)', лично. – EOF

+0

Это то, что мой инструктор дал нам, чтобы использовать для отображения региона региона между общими процессами @EOF – user3268401

ответ

1

так ММАП не определено в стандарте C, я предполагаю, что вы используете это: http://linux.die.net/man/2/mmap

Возвращаемое значение И. Указатель на память:

В случае успеха, MMAP() возвращает указатель на отображаемую область. При ошибке возвращается значение MAP_FAILED (то есть (void *) -1), а errno устанавливается соответственно . При успехе munmap() возвращает 0, при ошибке -1 и errno устанавливается (возможно, в EINVAL).

Вы правильно вычисляете N.

Однако у вас, вероятно, возникнут проблемы с добавлением с помощью указателя void *, поэтому добавьте свой указатель на int *.

int* p = ptr; 
int* nextP = p + 1; 
Смежные вопросы