- 论坛徽章:
- 0
|
回复 4# hellioncu
我是这样改的:
-------------------------
shmread.c
int main()
{
int running = 1;
void *shared_memory = (void *)0;
struct shared_use_at *shared_stuff;
int shmid;
srand((unsigned int) getpid());
shmid = shmget((key_t)1234, sizeof(struct shared_use_at), 0766|IPC_CREAT);
if(shmid == -1)
{
fprintf(stderr, "shmget failed\n");
exit(EXIT_FAILURE);
}
shared_memory = shmat(shmid, (void *)0, 0);
if(shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}
shared_stuff = (struct shared_use_at *)shared_memory;
shared_stuff->written_by_you = 0;
while(running)
{
if(shared_stuff->written_by_you==1)
{
printf("You wrote: %s", shared_stuff->some_text);
shared_stuff->written_by_you = 0;
if(strncmp(shared_stuff->some_text, "end", 3)==0)
{
running = 0;
}
}
}
if(shmdt(shared_memory)==-1)
{
fprintf(stderr, "shmdt failed\n");
exit(EXIT_FAILURE);
}
if(shmctl(shmid, IPC_RMID, 0)==-1)
{
fprintf(stderr, "shmctl(IPC_RMID) failed\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
-------------------------
shmwrite.c
int main()
{
int running = 1;
void *shared_memory = (void *)0;
struct shared_use_at *shared_stuff;
char buffer[256];
int shmid;
shmid = shmget((key_t)1234, sizeof(struct shared_use_at), 0766 | IPC_CREAT);
if(shmid == -1)
{
fprintf(stderr, "shmget failed\n");
exit(EXIT_FAILURE);
}
shared_memory = shmat(shmid, (void *)0, 0);
if(shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed\n");
exit(EXIT_FAILURE);
}
shared_stuff = (struct shared_use_at *)shared_memory;
while(running)
{
printf("Enter some text: ");
fgets(buffer, 256, stdin);
strncpy(shared_stuff->some_text, buffer, TEXT_SZ);
shared_stuff->written_by_you = 1;
if(strncmp(buffer, "end", 3) == 0)
{
running = 0;
}
}
if(shmdt(shared_memory) == -1)
{
fprintf(stderr, "shmdt failed\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
修改后:gcc shmread.c -o shmread
gcc shmwrite.c -o shmwrite
编译后执行,shmread可以获取共享内存的内容,而按照testread.c testwrite.c 调用shmread.c,shmwrite.c,shmread.c中的main函数名改为了shmread(), shmwrite.c中的main函数改为了shmwrite()这种方式,在执行makefile ,编译后,执行,zread可执行文件不能获取到共享内存内容?
|
|