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

来源:互联网 发布:淘宝宝贝评价采集工具 编辑:程序博客网 时间:2024/04/28 16:38
/*shmdata.c*/
#define TEXT_SZ 2048struct 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 2048int 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;}


                                             
0 0