关于共享内存的进程通信问题,求帮助

内核编译和嵌入式产品的设计与开发
回复
ubuntu733
帖子: 1
注册时间: 2012-05-18 11:28

关于共享内存的进程通信问题,求帮助

#1

帖子 ubuntu733 » 2012-05-18 11:48

接收程序
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#define TEXT_SZ 2048
struct share_use_st
{
int written_by_you;
char text[TEXT_SZ];

};
int main()
{
int running = 1;
void *share_memory = (void *)0;
struct share_use_st *share_stuff;
int shmid;


shmid = shmget((key_t)1234, sizeof(struct share_use_st), 0666 | IPC_CREAT);
if(shmid == -1)
{
fprintf(stderr, "shmget failed\n");
exit(EXIT_FAILURE);
}
share_memory = shmat(shmid, (void *)0, 0);
if (share_memory == (void *)-1)
{
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}
printf("Memory attached at %X\n", (int)share_memory);
share_stuff = (struct share_use_st *)share_memory;
share_stuff->written_by_you = 0;
while(running)
{
if(share_stuff->written_by_you)
{
printf("You write: %s", share_stuff->text);
sleep( rand()%4);
share_stuff->written_by_you = 0;
if (strncmp(share_stuff->text, "end", 3) == 0)
{
running = 0;
}
}

}
if (shmdt(share_memory) == -1)
{
fprintf(stderr, "shmid failed\n");
exit(EXIT_FAILURE);

}
if (shmctl(shmid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "delete memory failed\n");
exit(EXIT_FAILURE);

}
exit(EXIT_SUCCESS);
发送程序
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#define TEXT_SZ 2048
struct share_use_st
{
int written_by_you;
char text[TEXT_SZ];

};
int main()
{
int running = 1;
char *share_memory ;
struct share_use_st *share_stuff;
char buffer[BUFSIZ];
int shmid;

shmid = shmget((key_t)1234, sizeof(struct share_use_st), 0666 | IPC_CREAT );
if (shmid == -1)
{
fprintf(stderr, "shmget failed\n");
exit(EXIT_FAILURE);
}
share_memory = shmat(shmid, (void *)0, 0);
if (share_memory == (void *)-1)
{
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}
printf("Memory attached at %X\n", (int)share_memory);
share_stuff = (struct share_use_st *)share_memory;
while(running)
{
while(share_stuff->written_by_you == 1)
{
sleep(1);
printf("Wait for receive......\n");
}
printf("Enter some text:");
fgets(buffer, BUFSIZ, stdin);
strncpy(share_stuff->text, buffer, TEXT_SZ);
share_stuff->written_by_you == 1;
if (strncmp(buffer, "end", 3) == 0)
{
running = 0;
}
}
if (shmdt(share_memory) == -1)
{
fprintf(stderr, "shmdt failed\n");
exit(EXIT_FAILURE);


}
exit(EXIT_SUCCESS);



可是运行后怎么显示没有连上同一个内存块啊




[img]/home/freebird/桌面/1.png[/img]
















}
回复