int main(int argc,char* argv[]) { int retry_times,inq_interval; char* file_name; int len; int count; count=0; if(argc!=4){ printf("Usage: %s retry_times inquire_interval file_name\n",argv[0]); return 1; } retry_times=atoi(argv[1]); if(retry_times<=0){ printf("illegal retry times!\n"); return 1; } inq_interval=atoi(argv[2]); if(inq_interval<=0){ printf("illegal inquiring interval\n"); return 1; } len=strlen(argv[3]); if(len==0){ printf("illegal file name\n"); return 1; } if(get_access_right(inq_interval,retry_times,argv[3])==1){ while(count<5){ printf("pid: %ld process is occupying the resource, circle %d \n",(long)getpid(),count); count++; sleep(inq_interval); } release_right(file_name); return 0; }else printf("pid: %ld process cannot access the resource...retry %d times\n",(long)getpid(),retry_times); return 0; }
/* * argv[1] -> train number * argv[2] -> train direction */ int main(int agc, char* argv[], char* env[]){ train_number = atoi(argv[1]); process_pid = msgget(ftok("/tmp",100), IPC_CREAT | 0666); main_semaphore = semget(ftok("/tmp",200), 6 ,IPC_CREAT | 0666); if(main_semaphore ==-1 || process_pid == -1){ semctl(main_semaphore,0, IPC_RMID, NULL); msgctl(process_pid, IPC_RMID, NULL); perror("\nError in creating the message queues\n"); printf("\nExiting...\n\n"); exit(0); } pid = getpid(); sprintf(message.mtext,"%d",pid); message.mtype = 100; if(msgsnd(process_pid,&message,strlen(message.mtext)+1,0) == -1){ perror("\nError in sending\n"); } train_started(argv[2]); grab_self(argv[2]); grab_right(argv[2]); printf("\nTrain<%d>: Requests Junction-Lock\n", pid); grab(0); printf("\nTrain<%d>: Acquires Junction-Lock; Passing Junction\n", pid); sleep(2); release(0); printf("\nTrain<%d>: Releases Junction-Lock\n", pid); release_self(argv[2]); release_right(argv[2]); sprintf(message.mtext,"Finished"); message.mtype = 200; if(msgsnd(process_pid,&message,strlen(message.mtext)+1,0) == -1){ perror("\nError in sending\n"); } exit(0); }