编写一段C语言程序使其完成:两段程序 test1和test2通过一个共享内存进行通信,其中test1 向共享内存中写数据,test2从共享内存中读出数据或信息并将数据或信息送入标准输出上
时间: 2024-05-07 11:17:24 浏览: 109
好的,我理解你的问题了。以下是一个简单的C语言程序,它实现了test1和test2之间通过共享内存进行通信的功能:
test1.c:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#define SHM_NAME "/my_shared_mem"
#define SHM_SIZE 4096
int main()
{
// 创建共享内存区域,得到共享内存描述符
int shm_fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0644);
if (shm_fd < 0) {
perror("shm_open failed");
exit(1);
}
// 将共享内存区域大小设置为SHM_SIZE
if (ftruncate(shm_fd, SHM_SIZE) == -1) {
perror("ftruncate failed");
exit(1);
}
// 将共享内存映射到进程地址空间中
void *shm_ptr = mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
if (shm_ptr == MAP_FAILED) {
perror("mmap failed");
exit(1);
}
// 写入数据到共享内存
sprintf(shm_ptr, "Hello, world!");
// 关闭共享内存描述符
close(shm_fd);
return 0;
}
```
test2.c:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#define SHM_NAME "/my_shared_mem"
#define SHM_SIZE 4096
int main()
{
// 打开共享内存描述符
int shm_fd = shm_open(SHM_NAME, O_RDONLY, 0644);
if (shm_fd < 0) {
perror("shm_open failed");
exit(1);
}
// 将共享内存映射到进程地址空间中
void *shm_ptr = mmap(NULL, SHM_SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
if (shm_ptr == MAP_FAILED) {
perror("mmap failed");
exit(1);
}
// 从共享内存读取数据并输出到标准输出上
printf("Received: %s\n", (char *)shm_ptr);
// 关闭共享内存描述符
close(shm_fd);
return 0;
}
```
这两个程序使用共享内存来交换数据。test1将一个字符串写入共享内存,test2从共享内存中读取该字符串并将其输出到控制台上。如果您想跑这个例子,需要在两个不同的控制台或终端窗口中编译并运行这两个程序。确保先运行test1,然后再运行test2,因为test2需要从共享内存中读取test1写入的数据。
阅读全文