Exemple #1
0
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);
}