Мне нужно сделать несколько потоков в и из классов с помощью mmap() в Linux. Для этого я попытался сделать некоторый тестовый код, который записывает некоторые целые числа в файл, сохраняет его, снова загружает и записывает данные в файл в cout. Если этот тестовый код работает, тогда он не будет проблемой для создания потока и выхода из него.Как читать и писать с помощью mmap() в системе Linux
Когда я только начинал, у меня были сегментные ошибки, и если бы я не понял, что ничего не произошло, я немного погубился. Я нашел эту книгу http://www.advancedlinuxprogramming.com/alp-folder/alp-ch05-ipc.pdf, где около страницы 107 есть полезный код. Я копировать вставить этот код и сделал несколько небольших изменений и получил этот код:
int fd;
void* file_memory;
/* Prepare a file large enough to hold an unsigned integer. */
fd = open ("mapTester", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
//Make the file big enough
lseek (fd, 4 * 10 + 1, SEEK_SET);
write (fd, "", 1);
lseek (fd, 0, SEEK_SET);
/* Create the memory mapping. */
file_memory = mmap (0, 4 * 10, PROT_WRITE, MAP_SHARED, fd, 0);
close (fd);
/* Write a random integer to memory-mapped area. */
sprintf((char*) file_memory, "%d\n", 22);
/* Release the memory (unnecessary because the program exits). */
munmap (file_memory, 4 * 10);
cout << "Mark" << endl;
//Start the part where I read from the file
int integer;
/* Open the file. */
fd = open (argv[1], O_RDWR, S_IRUSR | S_IWUSR);
/* Create the memory mapping. */
file_memory = mmap (0, 4 * 10, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
close (fd);
/* Read the integer, print it out, and double it. */
scanf ((char *) file_memory, "%d", &integer);
printf ("value: %d\n", integer);
sprintf ((char*) file_memory, "%d\n", 2 * integer);
/* Release the memory (unnecessary because the program exits). */
munmap (file_memory, 4 * 10);
Но я получаю сегмент Фултс после «метки» соиЬ.
Тогда я заменить «прочитать часть» с этим:
fd = open("mapTester", O_RDONLY);
int* buffer = (int*) malloc (4*10);
read(fd, buffer, 4 * 10);
for(int i = 0; i < 1; i++)
{
cout << buffer[i] << endl;
}
Вот некоторые рабочий код, который показывает мне, что файл пуст. Я пытаюсь написать несколько способов записи в отображение без каких-либо изменений в результате.
Так как же я собираюсь написать свой код? И мой код чтения mmap выглядит нормально (на всякий случай вы можете увидеть некоторые очевидные недостатки)?
Я нашел некоторые другие ресурсы, которые еще не помогли мне, но поскольку я новый пользователь, я могу опубликовать только max 2 ссылки.
Спасибо за помощь, я узнал, что файл, который я написал, защищен от записи и из-за этого все не удалось. – RobbingDaHood