您的位置:首页 > 其它

简单的,两个不同进程间的共享内存通信(大小写转换)

2016-11-25 10:16 447 查看
/*shmdata.c*/
#define TEXT_SZ 2048

struct shared_use_st
{
int written;
char text[TEXT_SZ];
};
/*shmread.c*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/shm.h>
#include "shmdata.c"
#include <string.h>

int main()
{
int running = 1;
void *shm = NULL;
struct shared_use_st * shared;
int shmid;
int i;

shmid = shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);

if(shmid == -1)
{
fprintf(stderr,"shmget failed\n");
exit(EXIT_FAILURE);
}
shm = shmat(shmid,0,0);
if(shm == (void*)-1)
{
fprintf(stderr,"shmat failed\n");
exit(EXIT_FAILURE);
}
printf("\n memary attached at %d\n",(int)shm);

shared = (struct shared_use_st *)shm;
shared->written = 0;
while(running)
{
if(shared->written == 1)
{
printf("get string: %s\n",shared->text);
sleep(rand()%3);
shared->written = 2;
if(strncmp(shared->text,"end",3) == 0)
running = 0;
}
else if(shared->written == 2)
{
i = 0;
while(shared->text[i] != '\n')
{
if(shared->text[i] >= 'A' && shared->text[i] <= 'Z')
{
shared->text[i] += 32;
}
i++;
}
shared->written = 3;
printf("send string:%s\n",shared->text);
}
else
{
sleep(1);
}
}
if(shmdt(shm) == -1)
{
fprintf(stderr,"shmdt failed\n");
exit(EXIT_FAILURE);
}
if(shmctl(shmid,IPC_RMID,0) == -1)
{
fprintf(stderr,"stmctl failed\n");
exit(EXIT_FAILURE);
}

exit(EXIT_SUCCESS);
return 0;
}
/*shmwrite.c*/

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/shm.h>
#include "shmdata.c"
#include <string.h>

#define BUFFSIZE 2048

int main()
{
int running = 1;
void *shm = NULL;
struct shared_use_st * shared = NULL;
char buffer[BUFFSIZE + 1];
int shmid;

shmid = shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);

if(shmid == -1)
{
fprintf(stderr,"shmget failed\n");
exit(EXIT_FAILURE);
}
shm = shmat(shmid,0,0);
if(shm == (void*)-1)
{
fprintf(stderr,"shmat failed\n");
exit(EXIT_FAILURE);
}
printf("\n memary attached at %d\n",(int)shm);

shared = (struct shared_use_st *)shm;
//shared->written = 0;
while(running)
{
if(shared->written == 0)
{
printf("send string:\n");
fgets(buffer,BUFFSIZE,stdin);
strncpy(shared->text,buffer,TEXT_SZ);
shared->written = 1;
if(strncmp(shared->text,"end",3) == 0)
running = 0;
}
else if(shared->written == 3)
{
printf("get string:%s\n",shared->text);
shared->written = 0;
}
else
{
sleep(1);
}

}
if(shmdt(shm) == -1)
{
fprintf(stderr,"shmdt failed\n");
exit(EXIT_FAILURE);
}
/* if(shmctl(shmid,IPC_RMID,0) == -1)
{
fprintf(stderr,"stmctl failed\n");
exit(EXIT_FAILURE);
}*/
sleep(2);
exit(EXIT_SUCCESS);
return 0;
}







                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: