#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ERR_EXIT(m) do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
#define MAX_SIZE 512
struct shm_text
{
int pid;
char mtext[MAX_SIZE];
};
int main()
{
int shmid;
void *shmAddr = NULL;
struct shm_text *shm_wr,*shm_rd;
shmid = shmget(ftok(".",0),sizeof(struct shm_text),0666|IPC_CREAT|IPC_EXCL);
if(shmid == -1)
{
shmid = shmget(ftok(".",0),sizeof(struct shm_text),0666|IPC_CREAT);
if(shmid == -1)
{
ERR_EXIT("shmget fail");
}
}
shmAddr = shmat(shmid,(void *)0,0);
if(shmAddr == (void *)-1)
{
ERR_EXIT("shmat fail");
}
shm_wr = (struct shm_text *)shmAddr;
bzero(shm_wr,MAX_SIZE);
do
{
fcntl(0,F_SETFL,O_NONBLOCK);
fcntl(1,F_SETFL,O_NONBLOCK);
if((fgets(shm_wr->mtext,MAX_SIZE,stdin) != NULL) && (strncmp(shm_wr->mtext,"quit",4) != 0))
{
printf("send:%s",shm_wr->mtext);
}
sleep(1);
if((strlen(shm_wr->mtext) > 0) && (strncmp(shm_wr->mtext,"quit",4) != 0))
{
printf("get server info:%s",shm_wr->mtext);
bzero(shm_wr,MAX_SIZE);
}
if((strncmp(shm_wr->mtext,"quit",4) == 0))
printf("client %s",shm_wr->mtext);
}while(strncmp(shm_wr->mtext,"quit",4) != 0);
int rlt = shmdt(shmAddr);
if(rlt == -1)
{
ERR_EXIT("Delete fail1");
}
printf("client close\n");
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ERR_EXIT(m) do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
#define MAX_SIZE 512
struct msg_buf
{
int pid;
char mtext[MAX_SIZE];
};
main()
{
key_t key;
struct msg_buf msg_sbuf,msg_mbuf;
int msgid;
int rlt;
key = ftok(".",'c');
msgid = msgget(key,IPC_CREAT|IPC_EXCL|0666);
if(msgid == -1)
{
msgid = msgget(key,IPC_CREAT|0666);
if(msgid == -1)
{
ERR_EXIT("msgget fail");
}
}
bzero(&msg_sbuf,sizeof(struct msg_buf));
bzero(&msg_mbuf,sizeof(struct msg_buf));
msg_sbuf.pid = 10;
printf("msgid = %d\n",msgid);
do
{
fcntl(0,F_SETFL,O_NONBLOCK);
fcntl(1,F_SETFL,O_NONBLOCK);
fcntl(msgid,F_SETFL,O_NONBLOCK);
fgets(msg_sbuf.mtext,MAX_SIZE,stdin);
if(strlen(msg_sbuf.mtext) > 0 && (strncmp(msg_mbuf.mtext,"quit",4) != 0))
{
printf("send info:%s",msg_sbuf.mtext);
rlt = msgsnd(msgid,&msg_sbuf,sizeof(msg_sbuf.mtext),IPC_NOWAIT);
if(rlt == -1)
{
perror("msgsend error\n");
}
}
sleep(1);
bzero(&msg_sbuf.mtext,512);
rlt = msgrcv(msgid,&msg_sbuf,sizeof(struct msg_buf),0,IPC_NOWAIT|MSG_NOERROR);
if(rlt > 0 && (strncmp(msg_sbuf.mtext,"quit",4) != 0))
{
printf("rcv info:%s",msg_sbuf.mtext);
bzero(&msg_mbuf,sizeof(struct msg_buf));
bzero(&msg_sbuf.mtext,512);
}
if(strncmp(msg_sbuf.mtext,"quit",4) == 0)
printf("close!\n");
}while(strncmp(msg_sbuf.mtext,"quit",4) != 0);
rlt = msgctl(msgid,IPC_RMID,NULL);
if(rlt == -1)
{
ERR_EXIT("Delete error");
}
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ERR_EXIT(m) do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
#define MAX_SIZE 512
struct shm_text
{
int pid;
char mtext[MAX_SIZE];
};
int main()
{
int shmid;
void *shmAddr = NULL;
struct shm_text *shm_wr,*shm_rd;
shmid = shmget(ftok(".",0),sizeof(struct shm_text),0666|IPC_CREAT|IPC_EXCL);
if(shmid == -1)
{
shmid = shmget(ftok(".",0),sizeof(struct shm_text),0666|IPC_CREAT);
if(shmid == -1)
{
ERR_EXIT("shmget fail");
}
}
shmAddr = shmat(shmid,(void *)0,0);
if(shmAddr == (void *)-1)
{
ERR_EXIT("shmat fail");
}
shm_wr = (struct shm_text *)shmAddr;
bzero(shm_wr,MAX_SIZE);
printf("begin....\n");
do
{
fcntl(0,F_SETFL,O_NONBLOCK);
fcntl(1,F_SETFL,O_NONBLOCK);
if((fgets(shm_wr->mtext,MAX_SIZE,stdin) != NULL) && (strncmp(shm_wr->mtext,"quit",4) != 0))
{
printf("send:%s",shm_wr->mtext);
}
sleep(1);
if((strlen(shm_wr->mtext) > 0) && (strncmp(shm_wr->mtext,"quit",4) != 0))
{
printf("get client info:%s",shm_wr->mtext);
bzero(shm_wr,MAX_SIZE);
}
if((strncmp(shm_wr->mtext,"quit",4) == 0))
printf("server %s",shm_wr->mtext);
}while(strncmp(shm_wr->mtext,"quit",4) != 0);
int rlt = shmdt(shmAddr);
if(rlt == -1)
{
ERR_EXIT("Delete fail1");
}
printf("server close\n");
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ERR_EXIT(m) do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
#define MAX_SIZE 512
struct msg_buf
{
int pid;
char mtext[MAX_SIZE];
};
main()
{
key_t key;
struct msg_buf msg_sbuf,msg_mbuf;
int msgid;
int rlt;
key = ftok(".",'c');
msgid = msgget(key,IPC_CREAT|IPC_EXCL|0666);
if(msgid == -1)
{
msgid = msgget(key,IPC_CREAT|0666);
if(msgid == -1)
{
ERR_EXIT("msgget fail");
}
}
bzero(&msg_sbuf,sizeof(struct msg_buf));
bzero(&msg_mbuf,sizeof(struct msg_buf));
msg_sbuf.pid = 10;
printf("msgid = %d\n",msgid);
do
{
fcntl(0,F_SETFL,O_NONBLOCK);
fcntl(1,F_SETFL,O_NONBLOCK);
fcntl(msgid,F_SETFL,O_NONBLOCK);
fgets(msg_sbuf.mtext,MAX_SIZE,stdin);
if((strlen(msg_sbuf.mtext) > 0) && (strncmp(msg_mbuf.mtext,"quit",4) != 0))
{
printf("send info:%s",msg_sbuf.mtext);
rlt = msgsnd(msgid,&msg_sbuf,sizeof(msg_sbuf.mtext),IPC_NOWAIT);
if(rlt == -1)
{
perror("msgsend error\n");
}
}
sleep(1);
bzero(&msg_sbuf.mtext,512);
rlt = msgrcv(msgid,&msg_mbuf,sizeof(msg_mbuf.mtext),0,IPC_NOWAIT|MSG_NOERROR);
if(rlt > 0 && (strncmp(msg_mbuf.mtext,"quit",4) != 0))
{
printf("rcv info:%s",msg_mbuf.mtext);
bzero(&msg_mbuf,sizeof(struct msg_buf));
bzero(&msg_sbuf.mtext,512);
}
if(strncmp(msg_sbuf.mtext,"quit",4) == 0)
printf("close!\n");
/*else
bzero(&msg_sbuf.mtext,512);*/
}while(strncmp(msg_sbuf.mtext,"quit",4) != 0);
rlt = msgctl(msgid,IPC_RMID,NULL);
if(rlt == -1)
{
ERR_EXIT("Delete error");
}
}
本文来源:https://www.2haoxitong.net/k/doc/11a74f0a16fc700abb68fca3.html
文档为doc格式