编写一段C语言程序使其完成:两段程序 test1和test2通过一个共享内存进行通信,其中test1 向共享内存中写数据,test2从共享内存中读出数据或信息并将数据或信息送入标准输出上。
时间: 2024-05-07 14:17:37 浏览: 57
好的,您的要求我已经记录下来了。以下是编写完成的 C 语言程序,可以实现您所要求的功能:
test1.c
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#define SHM_SIZE 64 // 共享内存的大小为 64 字节
int main()
{
char *ptr;
int fd;
// 创建共享内存
fd = shm_open("/shm", O_CREAT|O_RDWR, 0666);
if (fd == -1) {
perror("shm_open");
exit(EXIT_FAILURE);
}
// 调整共享内存的大小
if (ftruncate(fd, SHM_SIZE) == -1) {
perror("ftruncate");
exit(EXIT_FAILURE);
}
// 映射共享内存到当前进程的地址空间
ptr = mmap(NULL, SHM_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
// 写入数据到共享内存
sprintf(ptr, "Hello, test2!");
// 打印提示信息
fprintf(stderr, "test1: write data to shared memory\n");
// 解除地址映射并关闭文件描述符
munmap(ptr, SHM_SIZE);
close(fd);
return 0;
}
```
test2.c
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#define SHM_SIZE 64 // 共享内存的大小为 64 字节
int main()
{
char *ptr;
int fd;
// 打开共享内存
fd = shm_open("/shm", O_RDONLY, 0666);
if (fd == -1) {
perror("shm_open");
exit(EXIT_FAILURE);
}
// 映射共享内存到当前进程的地址空间
ptr = mmap(NULL, SHM_SIZE, PROT_READ, MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
// 从共享内存中读取数据并输出到标准输出
fprintf(stdout, "test2: read data from shared memory: %s\n", ptr);
// 解除地址映射并关闭文件描述符
munmap(ptr, SHM_SIZE);
close(fd);
return 0;
}
```
以上就是完整的代码,您可以将它们分别编译并运行,就可以实现 test1 和 test2 通过共享内存进行通信的功能了。
阅读全文