2014-10-22 3 views
-2

Я действительно новичок в ОС Linux. Может кто-то сказать, как это сделать с linux. Я не прошу код C. Трудно это понять. Спасибо
1. Первая программа создает область общей памяти с использованием shmget() и сопоставляет ее с ее адресным пространством. Затем он записывает «Hello» в эту область общей памяти. Затем он ждет, пока первый байт в области общей памяти не станет *.
2. Вторая программа должна быть запущена после первого. Он отображает область разделяемой памяти, созданную первой программой, в ее адресное пространство и считывает строку и выводит ее на терминал. Затем он меняет первый байт области разделяемой памяти на *.shmget для IPC в linux

+2

А что вы пробовали? Как это работает? Как это не сработало? Можете ли вы уточнить, с чем вы столкнулись? Вы * читаете руководства на страницах системных вызовов? Вы * имеете * искали и искали другие примеры (их много)? –

+0

да, я читал много из них. Первая программа и вторая программа означает, что они должны быть в отдельных программах c? или это относится к двум процессам в одной программе? –

+1

Ну, в задании упоминаются первая и вторая «программа», а не «процесс». –

ответ

0

Я думаю, что это то, что вы ищете.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/shm.h> 

#define SHSIZE 100 

int main(){ 

    int shmid; 
    char *shm; 

    shmid = shmget(9876, SHSIZE, IPC_CREAT | 0660); 
    shm = shmat(shmid, NULL, 0); 
    memcpy(shm, "Hello", 5); 

    while(*shm != '*'){ 
    sleep(1); 
    } 

return 0; 
} 

И клиент:

#include <stdio.h> 
#include <sys/shm.h> 

#define SHSIZE 100 

int main(){ 
    int shmid; 
    char *shm,*s; 

    shmid = shmget(9876, SHSIZE, IPC_CREAT | 0660); 
    shm = shmat(shmid, NULL, 0); 

    for(s = shm; *s != 0; s++){ 
    printf("%c", *s); 
    } 
    printf("\n"); 

    *shm = '*'; 

return 0; 
} 
0

В основном вы спрашиваете, как использовать общую память для обмена данными между двумя программами. Это еще одна форма IPC или Inter-process communication.

См. Эту ссылку для видеоурока!

https://www.youtube.com/watch?v=IFRbX8u6lB0

+1

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

Смежные вопросы