예제 #1
0
/* algorithm from "Data structure and algorithm" - AHU  p62 */
int dequeue(Queue *queue)
{
  char ch;

  if (emptyqueue(queue)) {
    return EMPTYQUE;
  }
  else {
    ch = queue->ch[queue->front];
    queue->front = addone(queue,queue->front);
    (queue->count) --;
    return ch;
  }
}
예제 #2
0
파일: F_lite.c 프로젝트: YKG/misc
void bfs()
{
	int i;
	ACTRIE * p;

	root->failure = root;
	enqueue(&q, root);
	while (!emptyqueue(&q))
	{
		p = dequeue(&q);

		for (i = 0; i < MAXN; i++)
		{
			if (p->next[i] != NULL)
			{
				build_failure(i, p);
				enqueue(&q, p->next[i]);
			}
		}
	}
}
예제 #3
0
void irqinthandc(int dev){  
  int ch, f;                                         /* declare variable for int identification*/
  struct tty *tty = (struct tty *)(devtab[dev].dvdata);
  int baseport = devtab[dev].dvbaseport;             /* hardware i/o port */
  pic_end_int();                                     /* notify PIC that its part is done */
   
  f=inpt(baseport+UART_IIR);                         /* interrupt identification register */
  
  switch (f&UART_IIR_ID)                             /* mask 2-bit id field*/
  {
    case UART_IIR_RDI:                               /* if receiver interrupt */
      ch = inpt(baseport+UART_RX); 	                 /* read char, ack the device */
      enqueue((tty->rqu), ch);                       /* enqueue char to input queue */
      break;
  
    case UART_IIR_THRI:                              /* if transmitter interrupt */
      if(!emptyqueue(tty->tqu))                      /* if Tx queue not empty */
        outpt( baseport+UART_TX , dequeue(tty->tqu));/* output char to com port*/
      break;
  }
}
예제 #4
0
main(int argc, char *argv[]) {
    
    CLIENT *cl;
    int result; // utilizado nos resultados de chamadas do servidor para verificar status da execução
    string usuario, ipServidor; // parâmetros vindos do terminal
    string comando; // comando digitado pelo usuário durante a execução do programa
    string nomeArquivo;
    iniciaLista;
    
    qtArquivos = 0; //inicia contador da lista de espera para upload em zero
        

    // Verifica se parâmetros passados na chamada do programa estão corretos
    if (argc != 3) { // se não foi passado exatamente 2 parâmetros
        cout << " " << endl;
        cout << "Use: " << argv[0] << " <usuario> <IPservidor>" << endl; 
        exit(1);
	}
	if (strlen(argv[1]) > TAM_MAX_NOME_USER){ // se nome usuário muito grande
        cout << " " << endl;
	    cout << "Nome do usuário não pode ter mais de " << TAM_MAX_NOME_USER << " caracteres." << endl;
	    exit(1);
	}
	usuario = (string)argv[1];
    ipServidor = (string)argv[2];

    // Em relação ao diretório do usuário
    if(mkdir(usuario.c_str(), 0777) == -1){ // se ocorrer um erro na criação, 0777 é o tipo de permissão do diretório
        if (errno != 17){ // se este erro não for sinalizando que o diretório já existe
            cout << " " << endl;
            cout << "Não foi possível criar um diretório com o nome do usuário '" << usuario.c_str() << "' devido ao erro: " << strerror(errno) << endl;
            exit(1);
        }
    }

    // Verifica se é possível a conexão com o servidor
	if (!(cl = clnt_create(ipServidor.c_str(), SHARECENTERPROG,SHAREVERSION,"tcp"))) {
        clnt_pcreateerror(ipServidor.c_str()); 
        exit(1); 
    }
    
    // Verifica usuário
    if((result = *conectuser_args_1(toStringRPC(usuario),cl))){
        switch(result){
            case ERRO_MAX_CON:
                cout << " " << endl;
                cout << "Número máximo de conexões atingidas no servidor. Total de usuários já conectados: " << NUM_MAX_CON << "." << endl;
                break;
            case ERRO_JA_CON:
                cout << " " << endl;
                cout << "Usuário '" << usuario << "' já conectado ao servidor." << endl;
                break;
            default:
                cout << " " << endl;
                cout << "Resposta inesperada ou conexão perdida com o servidor." << endl;
        }
        exit(1);
    }
        
    // Exibição de menu
    cout << " " << endl;
    cout << "---------------------------------------------------Share Center---------------------------------------------------" << endl;
    cout << " " << endl;
    cout << "Digite um comando:" << endl;
    cout << "\\share <nome_do_arquivo>\tCompartilha um arquivo." << endl;
    cout << "\\list\t\t\t\tSolicita a lista de todos os arquivos compartilhados." << endl;
    cout << "\\download <nome_do_arquivo>\tBaixa um arquivo que esteja compartilhado no servidor." << endl;
    cout << "\\emptyqueue\t\t\tTenta fazer o envio dos arquivos que estão na fila de espera de um dado cliente." << endl;
    cout << "\\leave\t\t\t\tTermina a conexão com o servidor e finaliza o programa." << endl << endl;
    cout << "------------------------------------------------------------------------------------------------------------------" << endl;
    cout << " " << endl;
    do{
        cout << "\\";
        getline(cin,comando); // espera por comandos
        
        if(!comando.find("share ")){
            // depois que o usuario digitar o comando
            // comando.find_first_of(" ")+1 // procura pela posição onde existe espaço em branco e adiciona 1 posição
            // comando.substr( n ) // retorna string de n até o fim
            nomeArquivo = comando.substr( comando.find_first_of(" ")+1 );

            share(usuario, nomeArquivo, cl);
        }
        
        else if(!comando.compare("list")){
            list(cl);
        }
        
        else if(!comando.find("download ")){
            nomeArquivo = comando.substr( comando.find_first_of(" ")+1 );
            download(usuario, nomeArquivo, cl);
        }
        
        else if(!comando.compare("emptyqueue")){
            emptyqueue(usuario, cl);
        }
        
        else if(comando.compare("leave")!=0){
            cout << " " << endl;
            cout << "Comando desconhecido." << endl;
        }
    }while(comando.compare("leave")!=0);
    
    // Desconecta usuário do servidor
    if((result = *desconectuser_args_1(toStringRPC(usuario),cl))){
        cout << " " << endl;
        cout << "Resposta inesperada ou conexão perdida com o servidor." << endl;
        exit(1);
    }
    cout << " " << endl;
    cout << "Programa e conexão finalizados pelo usuário." << endl;
}