Beispiel #1
0
void		now_just_execute(t_vm *vm)
{
  t_proc	*proc, *next;
  t_func_arg	arg;
  int		i;
  int		res;

  for (next = proc = vm->proc; proc; proc = next)
    {
      next = proc->next;
      if (proc->cur_work == EXECUTE)
	{
	  arg.vm = vm;
	  arg.proc = proc;
	  init_arg(proc->rw->inst, &arg);
	  i = get_inst_pos(proc->rw->inst[0]);
	  res = cmds[i].func(&arg);
	  if (res)
	  {
	    proc->rw->delay = 0;
	    proc->cur_work = WAIT_AFTER;
	  }
	}
    }
}
Beispiel #2
0
int	dispvar(char **format, va_list ap)
{
	int		wr;
	t_args	*arg;

	wr = 0;
	arg = (t_args*)malloc(sizeof(t_args));
	*format += 1;
	if (**format != 0)
	{
		init_arg(&arg);
		while (is_flag(**format))
		{
			check_flags(format, &arg);
			check_field(format, &arg, ap);
			check_prec(format, &arg, ap);
			check_length(format, &arg);
		}
		wr += print_char(format, &arg, ap);
		wr += print_hexa(format, &arg, ap);
		wr += print_decimal(format, &arg, ap);
		wr += print_octal(format, &arg, ap);
	}
	free(arg);
	return (wr);
}
Beispiel #3
0
int main(int argc,char *argv[])
{
	if(init_arg(argc,argv,workspace,sizeof(workspace))!=0)
		exit(1);
	if(read_config_file()<0)
		exit(1);
	start_log();
	if(lib_init(datamodel_file)<0){
		tr_log(ERROR,"initial datamodel_file:%s failed!",datamodel_file);
		exit(1);
	}

	tr_log(DEBUG,"hello debug");
	tr_log(WARNING,"hello warning");
	tr_log(NOTICE,"hello notice");
	tr_log(ERROR,"hello error");
	return 0;
}
Beispiel #4
0
int		init(int ac, char **av)
{
  t_arg		info;
  int		fd;

  if (init_arg(&info) == 1)
    return (1);
  if (parse_arg(ac, av, &info) == 1)
    return (1);
  if (info.name == NULL || info.port == 0)
    {
      printf("You must precise a port and a team name !\n");
      return (1);
    }
  printf("Team name : %s, port : %d, host : %s\n",
	 info.name, info.port, info.hostname);
  if ((fd = connect_server(&info)) == -1)
    return (-1);
  exec_boucle(fd, &info);
  close(fd);
  return (0);
}
Beispiel #5
0
int	main( int argc, char **argv )
{
	init_arg();

	g_flg_gui = TRUE;
	g_flg_cui_mouse = TRUE;

#if	defined( NDEBUG )
	g_flg_cui = FALSE;
#elif	defined( DEBUG )
	g_flg_cui = TRUE;
#else
	g_flg_cui = FALSE;
#endif

	// メイン処理の初期化

	chk_arg( argc, argv );
	init_game();
	change_scene_gui( SCENE_N_INIT );

	if( g_flg_cui_mouse )
		gCuiMouse.init();

	if( g_flg_gui ){
		init_gtk_gui( argc, argv );

		// GUI のメイン・ループを開始

		gtk_main();

		// 終了

		close_game( EXIT_SUCCESS );

		gtk_exit( EXIT_SUCCESS );
	} else if( g_flg_cui_mouse ){
		init_gtk_cui_mouse( argc, argv );

		// CUI のメイン・ループを開始

		game_main();

		// 終了

		close_game( EXIT_SUCCESS );
	} else if( g_flg_cui ){
		init_gtk_cui( argc, argv );

		// CUI のメイン・ループを開始

		game_main();

		// 終了

		close_game( EXIT_SUCCESS );
	}

	exit_game( EXIT_SUCCESS );
	return EXIT_SUCCESS;
}
Beispiel #6
0
int main(int argc, char *argv[], char *envp[])
{
	init_arg(argc, argv);
	char Line[BUF_LEN];
	signal_set();
	while (1) 
	{
		if (input(Line) == false)
		{
			continue;
		}
		if (is_internal(Line))
		{
			run_internal(Line);
		}
		else
		{
			Process child;
			if (init_process(Line, &child) == false) 
			{
				fputs("Can't found init this command!", stderr);
				continue;
			}
			child.pid = fork();
			if (child.pid < 0) 
			{
				perror("fork()");
				continue;
			}
			if (child.pid) 
			{
				if (run_mode == IS_DEBUG_MODE) 
				{
					printf("调试模式:\n新进程PID:%d\n", child.pid);
				}
				if (!add_to_PL(&child))
				{
					perror("add_to_PL");
				}
				if (!child.is_daemon)
				{
					int status;
					pid_t pid = wait(&status);
					del_from_PL(pid);
				}
			}

			//如果该程序后台运行
			if ((!child.pid) && child.is_daemon) 
			{
				pid_t sid = setsid();
				if (sid < 0) 
				{
					perror("setsid");
				}
				close(STDIN_FILENO);
				close(STDOUT_FILENO);
				close(STDERR_FILENO);
			}
			if (!child.pid) 
			{
				execvp(child.vect[0], child.vect);
				perror("execvp");
				exit(1);
			}
			clean_process(&child);
		}
	}
	return 0;
}
Beispiel #7
0
void CManager::create_part() {

    pid_t pid;
    pid_t pid_to_send;
    pid_t prec[10];
    pid_t pid_result = 0;
    pid_t pid_intermediaire = 0;

    struct arguments_f_thread_watchdogM arguments;

    //struct timeval time1, time2;



    std::vector<int> vSportID; //enregistre les ports sampling dans un vecteur
    std::vector<int> vQportID; //enregistre les ports queuing dans un vecteur
    std::vector<std::string> vpath; //enregistre le chemin de chaque partition

    char name_machine[40];
    Cport_service PortService;
    const char **partitionTable = new const char*[m_vpart.size()]; //table des process que l'on va exécuter

    std::string arg_id_partition_master = "b";
    std::string arg_id_partition_slave = "b";
    std::string arg_id_partition = "b";
    std::string *arg1 = new std::string[m_vpart.size()];
    std::string *arg2 = new std::string[m_vpart.size()];
    std::string *arg3 = new std::string[m_vpart.size()];
    std::string *arg4 = new std::string[m_vpart.size()];


    std::vector<int> vWSportID;
    std::vector<int> vWQportID;
    std::vector<int> vSampling_sock; //num de sockets de la partition
    std::vector<int> vQueuing_sock;

    pid_t *part_pid = new pid_t[m_vpart.size()]; //tableau des pids des partitions
    int ret;

    std::vector<int> vtimeTable;

    pthread_attr_t *thread_attributes;

    int g = 0;


    /*********************************/
    /*Saving partition execution path*/
    /*********************************/


    for (unsigned int i = 0; i < m_vpart.size(); i++) {
        vpath.push_back((m_vpart[i]).pathProcess());
        std::cout << "vpath " << vpath[i] << std::endl;
        partitionTable[i] = vpath[i].c_str();
        std::cout << "Partition : " << partitionTable[i] << std::endl;
    }


    /*****************************/
    /*	SOCKETS' CREATION  	 */
    /*****************************/


    for (unsigned int i = 0; i < m_vpart.size(); i++) //for each partition
    {
        //vector's initialization
        vSportID.clear();
        std::vector<int>(vSportID).swap(vSportID);
        vQportID.clear();
        std::vector<int>(vQportID).swap(vQportID);


        vSportID = (m_vpart[i]).get_rSport(); //enregistre les ports sampling dans un vecteur
        for (unsigned int j = 0; j < vSportID.size(); j++) //pour chaque port Sampling
        {
            std::cout << "INIT sampling port" << std::endl;
            std::cout << " PORT :" << vSportID[j] << std::endl;
            //creation du socket associé avec le numéro de port et enregistrement grâce à la méthode vSsock_init
            //de la partition i contenue dans le vecteur m_vpart
            (m_vpart[i]).vSsock_add(PortService.CREATE_SAMPLING_PORT(vSportID[j], i + 1, 30, true, 0)); //Les deux derniers arguments ne sont pas pertinents
            std::cout << "END init sampling port" << std::endl;
        }

        std::cout << "					  " << std::endl;

        vQportID = (m_vpart[i]).get_rQport(); //enregistre les ports queuing dans un vecteur
        for (unsigned int j = 0; j < vQportID.size(); j++) //pour chaque port Queuing
        {

            std::cout << "INIT queuing ports" << std::endl;
            std::cout << " PORT :" << vQportID[j] << std::endl;
            (m_vpart[i]).vQsock_add(PortService.CREATE_QUEUING_PORT(vQportID[j], i + 1, 30, true, 0)); //Les deux derniers arguments ne sont pas pertinents
            std::cout << "END INIT PORTS" << std::endl;
        }

    }

    /*****************************/
    /*		INIT ARGUMENTS	 */
    /*****************************/


    std::cout << "********** Arguments' Initialazion **********" << std::endl;



    gethostname(name_machine, sizeof (name_machine));
    const char *arg = name_machine;



    for (unsigned int j = 0; j < m_vpart.size(); j++) {

        vWSportID.clear();
        std::vector<int>(vWSportID).swap(vWSportID); // réinitialise la taille du vecteur
        vWQportID.clear();
        std::vector<int>(vWQportID).swap(vWQportID);
        vSampling_sock.clear();
        std::vector<int>(vSampling_sock).swap(vSampling_sock);
        vQueuing_sock.clear();
        std::vector<int>(vQueuing_sock).swap(vQueuing_sock);


        vWSportID = (m_vpart[j]).get_wSport();
        vWQportID = (m_vpart[j]).get_wQport();
        vSampling_sock = (m_vpart[j]).get_vSsock(); //num de sockets de la partition
        vQueuing_sock = (m_vpart[j]).get_vQsock();


        std::cout << "NAME PROCESS : " << (m_vpart[j]).nameProcess() << std::endl;
        std::cout << " SIZE " << vQueuing_sock.size() << std::endl;
        for (unsigned int k = 0; k < vQueuing_sock.size(); k++) {
            std::cout << " sock =" << vQueuing_sock[k] << std::endl;
        }

        arg1[j] = init_arg(vSampling_sock);
        std::cout << " arg1 =" << arg1[j] << std::endl;

        arg2[j] = init_arg(vQueuing_sock);
        std::cout << " arg2 =" << arg2[j] << std::endl;

        arg3[j] = init_arg(vWSportID);
        std::cout << " arg3 =" << arg3[j] << std::endl;

        arg4[j] = init_arg(vWQportID);
        std::cout << " arg4 =" << arg4[j] << std::endl;
    }

    for (unsigned int i = 0; i < m_vpart.size(); i++) {
        std::cout << " arg1 " << i << " =" << arg1[i] << std::endl;
    }

    std::cout << "********** End of anguments' initialization **********" << std::endl;



    /*****************************/
    /*	CREATE PARTITIONS	 */
    /*****************************/



    for (unsigned int partitionNumber = 0; partitionNumber < m_vpart.size(); partitionNumber++) //boucle de fork().
    {
        std::cout << "Partition :" << partitionNumber << std::endl;
        std::cout << " Arg1 =" << arg1[partitionNumber] << std::endl;
        if ((pid = fork()) == 0) {
            //child
            std::cout << "IM the child and my PID is " << (int) getpid() << std::endl;
            std::cout << "Partition " << partitionNumber << std::endl;
            std::cout << "Path to binary : " << partitionTable[partitionNumber] << std::endl;
            sleep(1);
            char interm[3];
            sprintf(interm, "%d", partitionNumber);
            const char* argument5 = interm;
            const char* argument6[2] = {"0"};
            //            if (partitionNumber == 0) {
            //                arg_id_partition_master = "p";
            //                arg_id_partition = arg_id_partition_master;
            //            } else if (partitionNumber == 1) {
            //                arg_id_partition_slave = "b";
            //                arg_id_partition = arg_id_partition_slave;
            //            }
            ret = execlp(partitionTable[partitionNumber], arg, (arg1[partitionNumber]).c_str(), (arg2[partitionNumber]).c_str(), (arg3[partitionNumber]).c_str(), (arg4[partitionNumber]).c_str(), arg_id_partition.c_str(), argument5, argument6, NULL);

            if (ret == -1)
                perror(" exec ");

            exit(0);

        }
        prec[partitionNumber] = pid;
        part_pid[partitionNumber] = pid;
        std::cout << "IM the godfather and my PID is " << (int) getpid() << std::endl;
        std::cout << "I've created " << prec[partitionNumber] << std::endl;

        /*
         *\ Creation of monitoring thread if we are in manager
         */
        if (partitionNumber == 0) {
            // If in managager
            pid_to_send = prec[partitionNumber];
            arguments.pid_to_watch = &pid_to_send;
            arguments.myCManager = this;
            arguments.pid_result = &pid_result;
            thread_attributes = (pthread_attr_t *) malloc(sizeof (pthread_attr_t));
            thread_watchdogM = (pthread_t *) malloc(sizeof (pthread_t));
            pthread_attr_init(thread_attributes);
            if (pthread_create(thread_watchdogM, thread_attributes, (void*(*)(void*)) & CManager::f_thread_watchdogM, (void *) &arguments) != 0)
                perror(" Monitoring thread creation failed : ");
        }


    }//end initialazation fork(), every partition are running

    //pause le temps de finir d'initialiser les partitions /!\ valeur en dur
    usleep(10000);

    //mise en pause de toute les partitions
    for (unsigned int i = 0; i < m_vpart.size(); i++) {
        kill(part_pid[i], SIGSTOP); // suspend ieme partition
        std::cout << "part id :" << part_pid[i] << std::endl;
    }

    // creation de la table des temps

    for (unsigned int i = 0; i < m_vpart.size(); i++) {
        vtimeTable.push_back((m_vpart[i]).time());
    }


    /****************************************/
    /**			Schedulling				**/
    /****************************************/

    std::cout << "********** Scheduling loop**********" << std::endl;
    while (1) {
        if (pid_result != 0) {
            pid_intermediaire = pid_result;
            pid_result = 0;
            for (unsigned int partitionNumber = 0; partitionNumber < m_vpart.size(); partitionNumber++) {
                if (pid_intermediaire == prec[partitionNumber]) {
                    g = partitionNumber;
                }

            }
            std::cout << "Detection of partition failure... reboot..." << std::endl;

          /*  if ((pid = fork()) == 0) {
                //child

                std::cout << "IM the child and my PID is " << (int) getpid() << std::endl;
                std::cout << "partition " << g << std::endl;
                std::cout << "path to binary " << partitionTable[g] << std::endl;
                sleep(1);
                char interm[3];
                sprintf(interm, "%d", g);
                const char* argument5 = interm;
                const char* argument6[2] = {"1"};
                if (g == 0) {
                    if (arg_id_partition_master.compare("p")) {
                        arg_id_partition_master = "b";
                        arg_id_partition = arg_id_partition_master;
                    }
                } else if (g == 1) {
                    if (arg_id_partition_slave.compare("p")) {
                        arg_id_partition_slave = "b";
                        arg_id_partition = arg_id_partition_slave;
                    }

                }
                ret = execlp(partitionTable[g], arg, (arg1[g]).c_str(), (arg2[g]).c_str(), (arg3[g]).c_str(), (arg4[g]).c_str(), arg_id_partition.c_str(), argument5, argument6, NULL);

                if (ret == -1)
                    perror(" exec ");
                exit(0);

            }
            prec[g] = pid;
            part_pid[g] = pid;
            std::cout << "IM the godfather and my PID is " << (int) getpid() << std::endl;
            std::cout << "I've created " << prec[g] << std::endl;
            pid_intermediaire = 0;
            g = 0;*/
        }
        for (unsigned int i = 0; i < m_vpart.size(); i++) {
//            std::cout << " **ACTIVATION PARTITION " << i + 1 << std::endl;
            kill(part_pid[i], SIGCONT); //réveille partition i
            usleep(vtimeTable[i]); //budget temps p1 // ordonnanceur s'endort
//            std::cout << " **ARRET PARTITION" << i + 1 << std::endl;
            kill(part_pid[i], SIGSTOP); // suspend la partition i

        }
    }

}