写共享内存程序:
/* * File: server.cpp * Author: centos *说明:从键盘读入数据,存放在共享内存中。 * Created on 2010年3月1日, 下午3:44 */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #define BUF_SIZE 1024 #define MYKEY 114 int main(int argc, char** argv) { int shmid; char *shmptr; struct shmid_ds shmbuf; system("ipcrm -M114"); //调试程序时用 shmid = shmget(MYKEY, BUF_SIZE, (IPC_CREAT |0777) ); if ( -1 == shmid ) { printf("server shmget error!/n"); fprintf(stderr, "Error: %d - %s/n", errno, strerror(errno)); exit(1); } shmptr = (char *) (shmat(shmid, 0, 0)) ; if ( -1 == (int) shmptr ) { printf("server shmat error!/n"); fprintf(stderr, "Error: %d - %s/n", errno, strerror(errno)); if(shmctl(shmid,IPC_RMID,&shmbuf) < 0) { perror("shmctl error"); fprintf(stderr, "Error: %d - %s/n", errno, strerror(errno)); } exit(1); } strcpy(shmptr,"this is a test. /n"); while(1) { printf("Please input:"); scanf("%s",shmptr) ; while ('/n' != getchar() ); // fflush(stdin); // printf("your input: %s/n", shmptr); if (! strcmp(shmptr,"quit")) break; } shmdt(shmptr); if(shmctl(shmid,IPC_RMID,&shmbuf) < 0) perror("shmctl error"); return (EXIT_SUCCESS); }
读共享内存的程序:
/*
* File: main.cpp
* Author: centos
*
说明:从共享内存中读取数据,显示到屏幕上。
* Created on 2010年3月2日, 上午10:47
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define BUF_SIZE 1024
#define MYKEY 114
/*
*
*/
int main(int argc, char** argv)
{
int shmid;
char *shmptr;
struct shmid_ds shmbuf;
char last_str[1024];
if ( ( shmid = shmget(MYKEY, BUF_SIZE, IPC_CREAT) ) == -1 )
{
printf("clinet shmget error!/n");
exit(1);
}
shmptr = (char *) shmat(shmid, 0, 0);
if ( -1 == (int) shmptr )
{
printf("clinet shmat error!/n");
fprintf(stderr, "Error: %d - %s/n", errno, strerror(errno));
exit(1);
}
while(1)
{
// if((strlen(last_str) != strlen(shmptr)) ||
if( ( 0 != strcmp(last_str,shmptr)))
{
printf("%s %s/n", last_str,shmptr);
strcpy(last_str,shmptr);
}
if (! strcmp(shmptr,"quit")) break;
}
shmdt(shmptr);
if(shmctl(shmid,IPC_RMID,&shmbuf) < 0) perror("Close 共享内存出错shmctl error");
return (EXIT_SUCCESS);
}