Concurrent Sharedmemory
Concurrent Sharedmemory
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(){
shm=(int*) shmat(shmid,NULL,0);
sh=shm;
sh[0]=2;
sh[1]=2;
sh[2]=2;
sh[3]=2;
sh[4]=2;
sh[5]=2;
*ti=-1;
int newSocket;
socklen_t addr_size;
char buffer[1024];
printf("Test %d",*ti);
pid_t childpid;
printf("[-]Error in connection.\n");
exit(1);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
printf("[-]Error in binding.\n");
exit(1);
}
printf("[+]Bind to port %d\n", 4444);
printf("[+]Listening....\n");
}else{
printf("[-]Error in binding.\n");
while(1){
exit(1);
if((childpid = fork()) == 0)
close(sockfd);
*ti=1;
while(1)
if(strcmp(buffer, "exit") == 0)
*ti=-1;
printf("Disconnected from %s:%d\n", inet_ntoa(newAddr.sin_addr),
ntohs(newAddr.sin_port));
exit(1);
break;
else
bzero(buffer, sizeof(buffer));
strcpy(buffer,"1.REGISTER 2.UNREGISTER");
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
bzero(buffer, sizeof(buffer));
if(s==1)
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
bzero(buffer, sizeof(buffer));
switch(s)
bzero(buffer, sizeof(buffer));
recv(newSocket, buffer, 1024, 0);//MODE
s=atoi(buffer);
if(s==1)
if(sh[0]>0)
sh[0]=sh[0]-1;
strcpy(buffer,"ALLOTTED");
else
strcpy(buffer,"NOT AVAILABLE");
if(s==2)
if(sh[1]>0)
sh[1]=sh[1]-1;
strcpy(buffer,"ALLOTTED");
else
strcpy(buffer,"NOT AVAILABLE");
break;
case 2:strcpy(buffer,"1.TWO WHEELER 2.FOUR WHEELER");
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
if(s==1)
if(sh[2]>0)
sh[2]=sh[2]-1;
strcpy(buffer,"ALLOTTED");
else
strcpy(buffer,"NOT AVAILABLE");
if(s==2)
if(sh[3]>0)
sh[3]=sh[3]-1;
strcpy(buffer,"ALLOTTED");
else
strcpy(buffer,"NOT AVAILABLE");
}
}
break;
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
if(s==1)
if(sh[4]>0)
sh[4]=sh[4]-1;
strcpy(buffer,"ALLOTTED");
else
strcpy(buffer,"NOT AVAILABLE");
if(s==2)
if(sh[5]>0)
sh[5]=sh[5]-1;
strcpy(buffer,"ALLOTTED");
else
{
strcpy(buffer,"NOT AVAILABLE");
break;
if(s==2)
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
switch(s)
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
if(s==1)
sh[0]=sh[0]+1;
if(s==2)
{
sh[1]=sh[1]+1;
strcpy(buffer,"UNREGISTERED");
break;
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
if(s==1)
sh[2]=sh[2]+1;
if(s==2)
sh[3]=sh[3]+1;
strcpy(buffer,"UNREGISTERED");
break;
bzero(buffer, sizeof(buffer));
s=atoi(buffer);
if(s==1)
{
sh[4]=sh[4]+1;
if(s==2)
sh[5]=sh[5]+1;
strcpy(buffer,"UNREGISTERED");
break;
close(newSocket);
return 0;
Client:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(){
char buffer[1024];
int shmid=shmget(key,1024,0666|IPC_CREAT);
int *ti=(int*)shmat(shmid,(void*)0,0);
printf("test %d\n",*ti);
printf("[-]Error in connection.\n");
exit(1);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
exit(1);
printf("[+]Connected to Server.\n");
while(*ti==1)
sleep(1);
printf("sleep finished\n");
while(1)
scanf("%s", &buffer);
close(clientSocket);
exit(1);
printf("%s\n", buffer);
scanf("%d",&f);
snprintf(buffer,1024,"%d",f);
bzero(buffer, sizeof(buffer));
scanf("%d",&f);
snprintf(buffer,1024,"%d",f);
bzero(buffer, sizeof(buffer));
printf("%s\n", buffer);
scanf("%d",&f);
snprintf(buffer,1024,"%d",f);
bzero(buffer, sizeof(buffer));
printf("%s\n", buffer);
return 0;