#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int main(int argc, const char *argv[])
{
key_t key1=ftok("./fifo",1);
if(key1<0)
{
perror("ftok");
return -1;
}
printf("key1=%#x\n",key1);
key_t key2=ftok("./fifo",2);
if(key2<0)
{
perror("ftok");
return -1;
}
printf("key2=%#x\n",key2);
int shmid1=shmget(key1,128,IPC_CREAT|0664);
if(shmid1<0)
{
perror("shmget");
return -1;
}
int shmid2=shmget(key2,128,IPC_CREAT|0664);
if(shmid2<0)
{
perror("shmget");
return -1;
}
char *str=shmat(shmid1,NULL,0);
int *flag=shmat(shmid2,NULL,0);
*flag=0;
strcpy(str,"1234567");
while(1)
{
if(*flag==0)
{
printf("%s\n",str);
*flag=1;
}
}
return 0;
}
一、以共享内存中方式通信
- 放入一个字符串 "1234567",创建两个进程
- 一个进程倒置
- 另一个进程打印
需求:
打印的结果有序
提示:在共享内存中存储一个flag
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/shm.h>
#include<sys/ipc.h>
int main(int argc, const char *argv[])
{
key_t key1=ftok("./fifo",1);
if(key1<0)
{
perror("ftok");
return -1;
}
printf("key1=%#x\n",key1);
key_t key2=ftok("./fifo",2);
if(key2<0)
{
perror("ftok");
return -1;
}
printf("key2=%#x\n",key2);
int shmid1=shmget(key1,128,IPC_CREAT|0664);
if(shmid1<0)
{
perror("shmget");
return -1;
}
int shmid2=shmget(key2,128,IPC_CREAT|0664);
if(shmid2<0)
{
perror("shmget");
return -1;
}
char *str=shmat(shmid1,NULL,0);
int *flag=shmat(shmid2,NULL,0);
while(1)
{
if(*flag==1)
{
char *p=str;
char *q=str+strlen(str)-1;
char temp;
if(p<q)
{
temp=*p;
*p=*q;
*q=temp;
p++;
q--;
}
*flag=0;
}
}
return 0;
}