创建两个进程,定义一个共享内存,内存中存储char str[10]= "1234567";要求如下
1.A循环打印str;
2.B循环倒置str; 不能使用辅助数组;
3.要求出现的结果没有乱序,只能出现 1234567 7654321
4.不允许使用sleep函数
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
int main(int argc, const char *argv[])
{
key_t key=ftok("/home/ubuntu/",1);
if (key<0)
{
perror("ftok");
return -1;
}
int shmid=shmget(key,32,IPC_CREAT|0777);
if (shmid<0)
{
perror("shmget");
return -1;
}
int semid=semget(key,2,IPC_CREAT|0664);
if (semid<0)
{
perror("semget");
return -1;
}
struct sembuf sops={0,1,0};
semop(semid,&sops,1);
char* addr=(char*)shmat(shmid,NULL,0);
strcpy(addr,"123456");
while (1)
{
struct sembuf sops[2]={{0,-1,0},{1,1,0}};
semop(semid,&sops[0],1);
printf("%s\n",addr);
semop(semid,&sops[1],1);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
void strrev();
int main(int argc, const char *argv[])
{
key_t key=ftok("/home/ubuntu/",1);
if (key<0)
{
perror("ftok");
return -1;
}
int shmid=shmget(key,32,IPC_CREAT|0777);
if (shmid<0)
{
perror("shmget");
return -1;
}
int semid=semget(key,2,IPC_CREAT|0664);
if (semid<0)
{
perror("semget");
return -1;
}
char* addr=(char*)shmat(shmid,NULL,0);
while (1)
{
struct sembuf sops[2]={{0,1,0},{1,-1,0}};
semop(semid,&sops[1],1);
strrev(addr);
semop(semid,&sops[0],1);
}
return 0;
}
void strrev(char* str)
{
int len=strlen(str);
for (int i=0; i<len/2; i++)
{
str[i]^=str[len-1-i]^=str[i]^=str[len-1-i];
}
}