Лабораторная работа по "Программированию"
Автор: denis_korpach • Ноябрь 9, 2022 • Лабораторная работа • 375 Слов (2 Страниц) • 137 Просмотры
Родитель передает потомку три стороны треугольника, потомок
возвращает его периметр.
Родитель:
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
int main(int argc, char **argv) {
int oflags=O_RDWR;
int opt;
while ((opt = getopt(argc, argv, "c")) != -1) {
switch (opt) {
case 'c':
oflags = O_RDWR | O_CREAT;
break;
default:
fprintf(stderr, "Usage: %s -[c]\n", argv[0]);
exit(EXIT_FAILURE);
}
}
//размер разделяемой памяти
off_t length = 2 * 1024;
//имя разделяемой памяти
char *name = "/hello";
//создание или открытие разделяемой памяти с правами доступа rw-rw-rw
int fd = shm_open(name, oflags, 0666 );
//очищение разделяемой прамяти
ftruncate(fd, length);
assert (fd>0);
//создание отображения разделяемой памяти в память системы
u_char *ptr= (u_char*) mmap(NULL, length, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);
//передаваемые данные
u_char *msg = {"1218,78,999"};
strcpy((char*)ptr,msg);
//вывод на что выделилась общая память
fprintf(stderr, "Shared Memory Address: %s \n", ptr);
assert (ptr);
//закрываем файл разделяемой памяти
close(fd);
exit(0);
}
потомок:
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
...