Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // LINK SOAL : https://www.dropbox.com/sh/wussgfrqrmazf9g/AADnp_e-zKkHZWXyAFDQ5yJFa?dl=0
- // LINK TEMPLATE : http://pastebin.com/Rc7A08xG
- #include <stdio.h>
- #include <sys/ipc.h>
- #include <sys/types.h>
- #include <sys/shm.h>
- #include <sys/sem.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- struct data{
- char s_name[31];
- char s_address[51];
- char r_name[31];
- char r_address[51];
- char i_name[16];
- float weight;
- char type[10];
- };
- int main(){
- struct sembuf s;
- int h=shmget(123456,sizeof(struct data),IPC_CREAT|0666);//h=shmid
- int e=semget(123456,1,IPC_CREAT|0666);//e=semid
- semctl(e,0,SETVAL,0);
- struct data *deliv=(struct data*)shmat(h,NULL,0666);
- printf("SNE Delivery Service - Client\n\n");
- int flag=0,flagStreet=0,i;
- do{
- do{
- flag=0;
- printf("Sender Name [5..30 chars][\"exit\" to quit] : ");
- scanf("%[^\n]",deliv->s_name);getchar();
- if(strlen(deliv->s_name)>=5&&strlen(deliv->s_name)<=30)
- flag=1;
- else if(strcasecmp("Exit",deliv->s_name)==0)
- break;
- }while(flag==0);
- if(strcasecmp("Exit",deliv->s_name)!=0){
- do{
- flag=0;
- flagStreet=0;
- printf("Sender Address [10..50 chars]: ");
- scanf("%[^\n]",deliv->s_address);getchar();
- if(strlen(deliv->s_address)>=10&&strlen(deliv->s_address)<=50){
- flag=1;
- }
- for(i=0;i<strlen(deliv->s_address);i++){
- if(i+5<strlen(deliv->s_address)&&deliv->s_address[i]=='S'&&deliv->s_address[i+1]=='t'
- &&deliv->s_address[i+2]=='r'&&deliv->s_address[i+3]=='e'&&deliv->s_address[i+4]=='e'
- &&deliv->s_address[i+5]=='t'){//logikanya, Street pasti urutan
- flagStreet=1;
- break;
- }
- }
- }while(flag==0||flagStreet==0);
- do{
- flag=0;
- printf("Receiver Name [5..30 chars] : ");
- scanf("%[^\n]",deliv->r_name);getchar();
- if(strlen(deliv->r_name)>=5&&strlen(deliv->r_name)<=30)
- flag=1;
- }while(flag==0);
- do{
- flag=0;
- flagStreet=0;
- printf("Receiver Address [10..50 chars]: ");
- scanf("%[^\n]",deliv->r_address);getchar();
- if(strlen(deliv->r_address)>=10&&strlen(deliv->r_address)<=50){
- flag=1;
- }
- for(i=0;i<strlen(deliv->r_address);i++){
- if(i+5<strlen(deliv->r_address)&&deliv->r_address[i]=='S'&&deliv->r_address[i+1]=='t'
- &&deliv->r_address[i+2]=='r'&&deliv->r_address[i+3]=='e'&&deliv->r_address[i+4]=='e'
- &&deliv->r_address[i+5]=='t'){
- flagStreet=1;
- break;
- }
- }
- }while(flag==0||flagStreet==0);
- do{
- flag=0;
- printf("Item Name [3..15 chars] : ");
- scanf("%[^\n]",deliv->i_name);getchar();
- if(strlen(deliv->i_name)>=3&&strlen(deliv->i_name)<=15)
- flag=1;
- }while(flag==0);
- do{
- flag=0;
- printf("Item Weight [1..20 kg] : ");
- scanf("%f",&deliv->weight);getchar();fflush(stdin);//pake float karena input koma
- if(deliv->weight>=1&&deliv->weight<=20)
- flag=1;
- }while(flag==0);
- do{
- flag=0;
- printf("Delivery Type [Express|Regular] : ");
- scanf("%[^\n]",deliv->type);getchar();
- if(strcmp(deliv->type,"Express")==0||strcmp(deliv->type,"Regular")==0)//HATI! case sensitive
- flag=1;
- }while(flag==0);
- }
- s.sem_num=0;
- s.sem_op=1;
- s.sem_flg=0;
- semop(e,&s,1);
- printf("Input data, press enter\n");
- getchar();
- }while(strcasecmp(deliv->s_name,"exit")!=0);
- shmdt(&deliv);
- shmctl(h,IPC_RMID,0);
- semctl(e,0,IPC_RMID);
- }
Add Comment
Please, Sign In to add comment