akevintg

QUIZ II Operating System (CLIENT)

Jan 6th, 2016
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.29 KB | None | 0 0
  1. // LINK SOAL : https://www.dropbox.com/sh/wussgfrqrmazf9g/AADnp_e-zKkHZWXyAFDQ5yJFa?dl=0
  2. // LINK TEMPLATE : http://pastebin.com/Rc7A08xG
  3.  
  4. #include <stdio.h>
  5. #include <sys/ipc.h>
  6. #include <sys/types.h>
  7. #include <sys/shm.h>
  8. #include <sys/sem.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <time.h>
  12.  
  13. struct data{
  14.     char s_name[31];
  15.     char s_address[51];
  16.     char r_name[31];
  17.     char r_address[51];
  18.     char i_name[16];
  19.     float weight;
  20.     char type[10];
  21. };
  22.  
  23. int main(){
  24.     struct sembuf s;
  25.     int h=shmget(123456,sizeof(struct data),IPC_CREAT|0666);//h=shmid
  26.     int e=semget(123456,1,IPC_CREAT|0666);//e=semid
  27.     semctl(e,0,SETVAL,0);
  28.     struct data *deliv=(struct data*)shmat(h,NULL,0666);
  29.     printf("SNE Delivery Service - Client\n\n");
  30.     int flag=0,flagStreet=0,i;
  31.     do{
  32.         do{
  33.             flag=0;
  34.             printf("Sender Name [5..30 chars][\"exit\" to quit] : ");
  35.             scanf("%[^\n]",deliv->s_name);getchar();
  36.             if(strlen(deliv->s_name)>=5&&strlen(deliv->s_name)<=30)
  37.                 flag=1;
  38.             else if(strcasecmp("Exit",deliv->s_name)==0)
  39.                 break;
  40.         }while(flag==0);
  41.         if(strcasecmp("Exit",deliv->s_name)!=0){
  42.         do{
  43.             flag=0;
  44.             flagStreet=0;
  45.             printf("Sender Address [10..50 chars]: ");
  46.             scanf("%[^\n]",deliv->s_address);getchar();
  47.             if(strlen(deliv->s_address)>=10&&strlen(deliv->s_address)<=50){
  48.                 flag=1;
  49.             }
  50.             for(i=0;i<strlen(deliv->s_address);i++){
  51.                 if(i+5<strlen(deliv->s_address)&&deliv->s_address[i]=='S'&&deliv->s_address[i+1]=='t'
  52.                     &&deliv->s_address[i+2]=='r'&&deliv->s_address[i+3]=='e'&&deliv->s_address[i+4]=='e'
  53.                     &&deliv->s_address[i+5]=='t'){//logikanya, Street pasti urutan
  54.                     flagStreet=1;
  55.                     break;
  56.                 }
  57.             }
  58.         }while(flag==0||flagStreet==0);
  59.         do{
  60.             flag=0;
  61.             printf("Receiver Name [5..30 chars] : ");
  62.             scanf("%[^\n]",deliv->r_name);getchar();
  63.             if(strlen(deliv->r_name)>=5&&strlen(deliv->r_name)<=30)
  64.                 flag=1;
  65.         }while(flag==0);
  66.         do{
  67.             flag=0;
  68.             flagStreet=0;
  69.             printf("Receiver Address [10..50 chars]: ");
  70.             scanf("%[^\n]",deliv->r_address);getchar();
  71.             if(strlen(deliv->r_address)>=10&&strlen(deliv->r_address)<=50){
  72.                 flag=1;
  73.             }
  74.             for(i=0;i<strlen(deliv->r_address);i++){
  75.                 if(i+5<strlen(deliv->r_address)&&deliv->r_address[i]=='S'&&deliv->r_address[i+1]=='t'
  76.                     &&deliv->r_address[i+2]=='r'&&deliv->r_address[i+3]=='e'&&deliv->r_address[i+4]=='e'
  77.                     &&deliv->r_address[i+5]=='t'){
  78.                     flagStreet=1;
  79.                     break;
  80.                 }
  81.             }
  82.         }while(flag==0||flagStreet==0);
  83.         do{
  84.             flag=0;
  85.             printf("Item Name [3..15 chars] : ");
  86.             scanf("%[^\n]",deliv->i_name);getchar();
  87.             if(strlen(deliv->i_name)>=3&&strlen(deliv->i_name)<=15)
  88.                 flag=1;
  89.         }while(flag==0);
  90.         do{
  91.             flag=0;
  92.             printf("Item Weight [1..20 kg] : ");
  93.             scanf("%f",&deliv->weight);getchar();fflush(stdin);//pake float karena input koma
  94.             if(deliv->weight>=1&&deliv->weight<=20)
  95.                 flag=1;
  96.         }while(flag==0);
  97.         do{
  98.             flag=0;
  99.             printf("Delivery Type [Express|Regular] : ");
  100.             scanf("%[^\n]",deliv->type);getchar();
  101.             if(strcmp(deliv->type,"Express")==0||strcmp(deliv->type,"Regular")==0)//HATI! case sensitive
  102.                 flag=1;
  103.         }while(flag==0);
  104.         }
  105.         s.sem_num=0;
  106.         s.sem_op=1;
  107.         s.sem_flg=0;
  108.         semop(e,&s,1);
  109.         printf("Input data, press enter\n");
  110.         getchar();
  111.     }while(strcasecmp(deliv->s_name,"exit")!=0);
  112.     shmdt(&deliv);
  113.     shmctl(h,IPC_RMID,0);
  114.     semctl(e,0,IPC_RMID);
  115. }
Add Comment
Please, Sign In to add comment