Я действительно новичок в ОС Linux. Может кто-то сказать, как это сделать с linux. Я не прошу код C. Трудно это понять. Спасибо
1. Первая программа создает область общей памяти с использованием shmget() и сопоставляет ее с ее адресным пространством. Затем он записывает «Hello» в эту область общей памяти. Затем он ждет, пока первый байт в области общей памяти не станет *.
2. Вторая программа должна быть запущена после первого. Он отображает область разделяемой памяти, созданную первой программой, в ее адресное пространство и считывает строку и выводит ее на терминал. Затем он меняет первый байт области разделяемой памяти на *.shmget для IPC в linux
-2
A
ответ
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.
См. Эту ссылку для видеоурока!
+1
Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –
Смежные вопросы
- 1. Linux shmget() function in C++
- 2. Общая память для Linux: shmget() vs mmap()?
- 3. Broadcast IPC на Linux
- 4. Linux ipc msgsnd() failed
- 5. Системный вызов shmget [Linux] - выделены байты?
- 6. Broken pipe in Linux (IPC)
- 7. Какой метод Linux IPC использовать?
- 8. Использование файлов в качестве IPC в Linux?
- 9. shmget() дает ошибку EINVAL
- 10. Простой IPC через сообщения linux
- 11. Как система V IPC имеет дело с фрагментацией при распределении большого блока памяти с помощью «shmget»?
- 12. Гарантирует ли IPC порядок сообщений в Linux?
- 13. Создать огромную страницу разделяемой память для IPC в Linux
- 14. IPC и/или разделяемая память для Linux для новичков
- 15. IPC с использованием общей памяти в C
- 16. IPC между процессами Linux и Windows
- 17. Linux IPC - Несколько писателей, один читатель
- 18. IPC с использованием сигналов на linux
- 19. Решение для многоканального IPC?
- 20. Linux IPC: не удается удалить msqid_ds
- 21. Shmget возвращает значение -1
- 22. Понимание жизненного цикла линии linux для связи ipc
- 23. Windows IPC-аналог для Linux Unix домена и сокетов Netlink
- 24. shmget не работает
- 25. Чтение Мусор с shmget
- 26. IPC в Фортране?
- 27. C - Невозможно получить shmget/shmat для компиляции
- 28. Initdb для PostgreSql дает shmget ошибку
- 29. Linux лучший способ в двухстороннем IPC в C
- 30. AF_INET для IPC в окнах
А что вы пробовали? Как это работает? Как это не сработало? Можете ли вы уточнить, с чем вы столкнулись? Вы * читаете руководства на страницах системных вызовов? Вы * имеете * искали и искали другие примеры (их много)? –
да, я читал много из них. Первая программа и вторая программа означает, что они должны быть в отдельных программах c? или это относится к двум процессам в одной программе? –
Ну, в задании упоминаются первая и вторая «программа», а не «процесс». –