1、
逆转的进程
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>
int main(int argc, const char *argv[])
{
key_t key=ftok("./",1);
if(key<0){
perror("ftok");
return -1;
}
//printf("key=%#x\n",key);
/* int msqid=msgget(key,IPC_CREAT|0664);{{{
if(msqid<0){
perror("msgget");
return -1;
}
printf("msqid=%d\n",msqid);
system("ipcs -q");*//*}}}*/
int shmid=shmget(key,32,IPC_CREAT|0664);
if(shmid<0){
perror("shmget");
return -1;
}
void * shmaddr=shmat(shmid,NULL,0);
if((void*)-1==shmaddr){
perror("shmaddr");
return -1;
}
int buf[7]={1,2,3,4,5,6,7};
int *p=(int*)shmaddr;
int *flag=(int *)shmaddr+7;
*flag=0;
int i=0;
for(i=0;i<7;i++){
p[i]=buf[i];
}
while(1){
if(*flag==0){
int temp=0;
int *start=p;
int *end=p+6;
while(start<end){
temp=*start;
*start=*end;
*end=temp;
start++;
end--;
}
*flag=1;
}
}
if(shmdt(shmaddr)<0){
perror("shmdt");
return -1;
}
system("ipcs -m");
return 0;
}
输出的进程
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
key_t key=ftok("./",1);
if(key<0){
perror("ftok");
return -1;
}
// printf("key=%#x\n",key);
/* int msqid=msgget(key,IPC_CREAT|0664);{{{
if(msqid<0){
perror("msgget");
return -1;
}
printf("msqid=%d\n",msqid);
system("ipcs -q");*//*}}}*/
int shmid=shmget(key,32,IPC_CREAT|0664);
if(shmid<0){
perror("shmget");
return -1;
}
void * shmaddr=shmat(shmid,NULL,0);
if((void*)-1==shmaddr){
perror("shmaddr");
return -1;
}
int buf[7]={1,2,3,4,5,6,7};
int *p=(int*)shmaddr;
int *flag=(int *)shmaddr+7;
int i=0;
while(1){
for(i=0;i<7;i++){
if(*flag==1){
printf("%d",*(p+i));
}
}
*flag=0;
puts("");
sleep(1);
}
if(shmdt(shmaddr)<0){
perror("shmdt");
return -1;
}
shmctl(shmid,IPC_RMID,NULL);
system("ipcs -m");
return 0;
}