编写一个c程序:test1和test2通过一个共享内存进行通信,其中test1向共享内存中写入数据,test2从共享内存中读取数据或信息将数据备份或数据输出上。
时间: 2024-06-10 07:03:49 浏览: 119
通过共享内存实现多进程间的通信,共享数据
5星 · 资源好评率100%
好的,以下是您需要的C语言程序:
test1.c
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
#define SHM_KEY 5678
int main() {
int shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);
if (shmid < 0) {
printf("Error creating shared memory segment\n");
exit(1);
}
char *shm_ptr = shmat(shmid, NULL, 0);
if (shm_ptr == (char *) -1) {
printf("Error attaching shared memory segment\n");
exit(1);
}
printf("Enter data to write to shared memory:\n");
fgets(shm_ptr, SHM_SIZE, stdin);
// Write null terminator in case input is less than SHM_SIZE
shm_ptr[SHM_SIZE - 1] = '\0';
printf("Data written to shared memory: %s\n", shm_ptr);
// Detach shared memory segment
if (shmdt(shm_ptr) < 0) {
printf("Error detaching shared memory segment\n");
exit(1);
}
return 0;
}
```
test2.c
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
#define SHM_KEY 5678
int main() {
int shmid = shmget(SHM_KEY, SHM_SIZE, 0666);
if (shmid < 0) {
printf("Error locating shared memory segment\n");
exit(1);
}
char *shm_ptr = shmat(shmid, NULL, 0);
if (shm_ptr == (char *) -1) {
printf("Error attaching shared memory segment\n");
exit(1);
}
printf("Data read from shared memory: %s\n", shm_ptr);
// Copy data to backup file
FILE *backup = fopen("backup.txt", "w");
if (backup == NULL) {
printf("Error creating backup file\n");
exit(1);
}
fprintf(backup, "%s", shm_ptr);
fclose(backup);
// Detach shared memory segment
if (shmdt(shm_ptr) < 0) {
printf("Error detaching shared memory segment\n");
exit(1);
}
return 0;
}
```
这两个程序之间的通信是通过共享内存实现的。test1.c创建了一个大小为SHM_SIZE的共享内存段,并向其写入从stdin获取的数据。test2.c打开同一共享内存段,并从中读取数据,然后将其备份到一个文本文件中。请按照以下步骤执行这些程序,以确保它们可以相互通信:
1. 打开两个终端窗口
2. 在第一个窗口中运行test1.c
3. 在第二个窗口中运行test2.c
4. 在test1.c中输入一些数据,然后按Enter键
5. 检查第二个窗口中的输出,确保它显示了test1.c中输入的数据,并且备份文件已经创建。
希望这可以帮助您学习共享内存的基础!
阅读全文