编写c程序实现共享内存操作 程序1向共享内存写入键盘输入的数据; 程序2从共享内存读取程序1的数据并打印; 两个程序都使用while(1)循环执行,直到强制退出。
时间: 2024-05-05 15:22:08 浏览: 13
以下是一个基本的共享内存操作的C程序,实现了两个进程之间的通信:
程序1:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMSZ 27
int main()
{
char c;
int shmid;
key_t key;
char *shm, *s;
key = 5678;
if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) {
perror("shmget");
exit(1);
}
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
s = shm;
while (1) {
printf("Enter a character: ");
c = getchar();
*s++ = c;
if (c == '\n') {
*s++ = '\0';
break;
}
}
shmdt(shm);
return 0;
}
```
程序2:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMSZ 27
int main()
{
int shmid;
key_t key;
char *shm, *s;
key = 5678;
if ((shmid = shmget(key, SHMSZ, 0666)) < 0) {
perror("shmget");
exit(1);
}
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
perror("shmat");
exit(1);
}
s = shm;
while (*s != '\0') {
putchar(*s++);
}
putchar('\n');
shmdt(shm);
return 0;
}
```
这两个程序通过共享内存进行通信,程序1将用户输入的字符写入共享内存,程序2从共享内存中读取字符并打印出来。这两个程序都使用while(1)循环执行,直到强制退出。