Example #1
0
int concatenaDiretoriosAosComandos (struct Tokens * tokens){
	char * diretorioAtual;
	struct ListaLigada * novosTokens = calloc (1,sizeof(struct ListaLigada *));
	if (!novosTokens)
		//será fatal para o sistema
		trataFalha();

	int i = 0;
	while (i < tokens->tokens->total){
		int j;
		int ok = 0;
		for (j = 0; j < ambiente->total; j++){
			diretorioAtual = recupera (ambiente,j);
			struct dirent **  arquivos;
			int result = scandir(diretorioAtual,&arquivos,NULL,NULL);
			if (result < 0){
				//se der erro aqui o resultado final será completamente alterado
				//portanto estou considerando este erro como fatal para o programa
				trataFalha();
			}
			while (result--){
				if (strcmp(recupera(tokens->tokens,i),arquivos[result]->d_name) == 0){
					char * aux = (char *)calloc (4096 + 1,sizeof(char *));
					strcpy(aux,diretorioAtual);
					strcat(aux,"/");
					strcat(aux,recupera(tokens->tokens,i));
					adiciona (novosTokens,aux);
					ok = 1;
					free (arquivos[result]);
					break;
				}
				free(arquivos[result]);

			}
			free (arquivos);
			if (ok){
				//para a procura se ja tiver encontrado no diretorio atual e passa para o proximo token
				break;
			}
		}
		if (!ok){
			printf ("Comando %s não encontrado) no seu path\n",recupera(tokens->tokens,i));
			return 0;
		}
		//percorre a sequencia de tokens até encontrar um outro comando, que somente podera vir depois de pipe
		while (i < tokens->tokens->total - 1 &&(strcmp(recupera(tokens->tokens,i),"|")!= 0 )){
			i++;
			adiciona(novosTokens,recupera(tokens->tokens,i));
		}
		//soma mais um para um para o proximo token que será o próximo comando após o operador
		i++;
	}
	struct ListaLigada * apagar = tokens->tokens;
	tokens->tokens = novosTokens;
	free(apagar);
	return 1;
}
int main(int argc, const char * argv[]) {

    //Lista * minhaLista = (Lista *) malloc(sizeof(Lista));
    Node *p = novo(1);
    //addAt(p, 2, 0);
    //addAt(p, 3, 3);
    p = adiciona(p, 2);
    p = adiciona(p, 3);

    imprime(p);

    return 0;
}
Example #3
0
struct Tokens * getTokens (const char * const comando,const char * const del){

	struct Tokens * tokens =(struct Tokens *) calloc (1,sizeof(struct Tokens));
	if (tokens == NULL)
		trataFalha();
	//cria uma cópia para que a original não seja alterada
	char *aux = strdup (comando);

	tokens->tokens =(struct ListaLigada *) calloc (1,sizeof(struct ListaLigada));

	if (tokens->tokens == NULL)
			trataFalha();
	tokens->stringOriginal = (char *) calloc (strlen(aux) + 1,sizeof(char));
	if (tokens->stringOriginal == NULL)
		trataFalha();
	tokens->delimiters = (char * ) calloc (strlen(del) + 1,sizeof(char));
	if (tokens->delimiters == NULL)
		trataFalha();
	strcpy (tokens->stringOriginal,aux);
	strcpy(tokens->delimiters,del);


	int i = 0;
	char * token = (char *)calloc (4096 + 1,sizeof(char));
	token = strtok(aux,del);
	do{
		adiciona(tokens->tokens,token);
		i++;
		token = strtok(NULL,del);
	}
	while (token != NULL);
	return tokens;
}
Example #4
0
int main(int argc, char *argv[]){
	//Estruturas
	BuscaRetorno* r;
	Arvore* raiz;
	
	//Inicializacao da arvore
	resetActualTree();
	raiz = initializeTree();

	
	//Parametros
	char* nameEntrada = argv[1];
	char* nameBusca = argv[2];
	char* nameSaida = argv[3];

	//Arquivo
	FILE *arq;
	FILE *write;
 	char info[MAX_LENGHT_WORD];


// ==================== INSERINDO =========================
 
 	printf("Inserindo na arvore\n");
 	
	fopen_s(&arq,nameEntrada,"r");
	if(arq == NULL)
			printf("Erro, nao foi possivel abrir o arquivo\n");
	else
		while( (fgets(info, sizeof(info), arq))!=NULL )
			raiz = adiciona(raiz,novoNo(info));
	
	fclose(arq);
	//raiz = adiciona(raiz,novoNo("1"));
	
// ==================== BUSCANDO =========================
	
	printf("\nBUSCANDO\n");
	fopen_s(&arq,nameBusca,"r");
	if(arq == NULL)
			printf("Erro, nao foi possivel abrir o arquivo de leitura\n");
	else{
		fopen_s(&write,nameSaida,"w");
		if(arq == NULL)
			printf("Erro, nao foi possivel abrir o arquivo de escrita\n");
		else
			while( (fgets(info, sizeof(info), arq))!=NULL ){
				r = busca(raiz,info);
				info[strlen(info)-1] = '\0'; 
				if(encontrouNaBusca(r))
					fprintf(write,"%s presente %d\n",info,profDaBusca(r));
				else
					fprintf(write,"%s ausente %d\n",info,profDaBusca(r));
			}
	}
	fclose(arq);
	fclose(write);
}
void DisplayFile::addObj(Object* obj){
    if(obj->getName() == "")
        throw MyException("Adicione um nome para este objeto.\n");

    if(!contem(obj)){
        adiciona(obj);
    }else
        throw MyException("Ja existe um objeto com o nome '"+ obj->getName() +"'.\n");
}
Example #6
0
	/**
	 * @brief      Adiciona dado em uma posição especifica da lista
	 *
	 * @param[in]  dado  Dado a ser adicionado
	 * @param[in]  pos   Posição onde o dado vai ser adicionado
	 */
	void adicionaNaPosicao(const T& dado, int pos) {
		if (pos < 0 || pos > size) throw 20;
		if (pos == 0) return adicionaNoInicio(dado);
		if (pos == size) return adiciona(dado);
		auto current = head;
		auto old = current;
		while (--pos) {
			old = current;
			current = current->getProximo();
		}
		old->setProximo(std::make_shared<Elemento<T>>(dado, current));
		++size;
	}
Example #7
0
int executaComandoPath (struct Tokens * tokens){
	//se tiver mais que dois elementos, quer dizer que é para adicionar ou remover variáveis do path
	if (tokens->tokens->total > 2){
		//verifica se existem operadores após o comando próprio, se sim, nada é executado
		if (contem (tokens->tokens,"|") || contem (tokens->tokens,">") || contem (tokens->tokens,"<") || contem (tokens->tokens,"2>"))
			return 0;
		//se o proximo token for + adiciona tenta adicionar cada argumento ao ambiente
		if (strcmp(recupera (tokens->tokens,1),"+") == 0){
			int i = 2;
			while (i < tokens->tokens->total){
				//checa se o diretório existe antes de adicioná-lo...
				char * dir = recupera (tokens->tokens,i);
				DIR * op = opendir(dir);
				if (op == NULL){
					printf ("Não foi possível adicionar diretório %s ao path: %s\n",dir,strerror(errno));
					closedir(op);
				}
				else{
					closedir(op);
					adiciona(ambiente,dir);
				}
				i++;
			}
			return 1;
		}
		//se o comando for do tipo path - ... tenta remover os elementos ... do ambiente
		else if (strcmp(recupera (tokens->tokens,1),"-") == 0){
				int i = 2;
				while (i < tokens->tokens->total && ambiente->total >= 1){
					removeValores(ambiente,recupera(tokens->tokens,i));
					i++;
				}
				return 1;
		}

	}
	//se tiver somente um argumento, quer dizer que é pra imprimir as variáveis em path
	else if (tokens->tokens->total == 1){
		int i = 0;
		while (i < ambiente->total - 1){
			printf ("%s:",recupera(ambiente,i++));
		}
		if (ambiente->total >= 1)
		printf ("%s\n",recupera (ambiente,i));
		return 1;
	}


	return 0;
}
Example #8
0
    /*!
        Adiciona um dado em ordem na lista.
        \param endereço do dado do tipo T que sera inserido em ordem na lista.
    */
	void adicionaEmOrdem(const T& data) {
		printf("Adiciona em ordem errado!\n");
		if (listaVazia())
			adicionaNoInicio(data);
		Elemento<T>* aux;
		int pos;
		aux = head;
		pos = 0;
		while (aux->getProximo() != NULL && maior(data, aux->getInfo())) {
			aux = aux->getProximo();
			pos++;
		}
		if (maior(data, aux->getInfo()))
			adiciona(data);
		adicionaNaPosicao(data, pos);
	}
Example #9
0
	/**
	 * @brief      Adiciona dado de forma que a lista fique ordenada
	 *
	 * @param[in]  dado  Dado a ser adicionado
	 */
	void adicionaEmOrdem(const T& dado) {
		if (listaVazia()) return adicionaNoInicio(dado);
		auto current = head;
		auto old = current;
		int i = 0;
		while (current) {
			if (current->getInfo() > dado) break;
			old = current;
			current = current->getProximo();
			++i;
		}
		if (!i) return adicionaNoInicio(dado);
		if (i == size) return adiciona(dado);
		old->setProximo(std::make_shared<Elemento<T>>(dado, current));
		++size;
	}
void main() {
  int op;
  do {
    clrscr();
    printf("MENU - LISTA ENCADEADA\n");
    printf("----------------------\n");
    printf("1. Adicionar\n");
    printf("2. Remover\n");
    printf("3. Listar\n");
    printf("4. Limpar\n");
    printf("5. Sair\n\n");
    printf("Opcao: "); scanf("%d",&op);
    clrscr();
    switch (op) {
      case 1: {
	printf("Digite o dado: ");
	int dado;
	scanf("%d",&dado);
	adiciona(dado);
	break;
      }
      case 2: {
	if (inicio!=NULL) {
	  printf("Removendo... ");
	  apaga();
	  getch();
	}
	break;
      }
      case 3: {
	lista();
        getch();
	break;
      }
      case 4: {
	printf("Limpando...");
	limpar();
	getch();
	break;
      }
    }
  } while (op!=5);
  limpar();
}
Example #11
0
	/**
	 * @brief      Adiciona o dado na posição
	 *
	 * @param[in]  dado  Dado a ser inserido
	 * @param[in]  pos   Posição para inserir o dado
	 */
	void adicionaNaPosicao(const T& dado, int pos) {
		if(pos > size || pos < 0)
			throw std::runtime_error("posicao must be smaller than "
									"ultimo+1 and greater than zero");

		if (pos == 0)
			return adicionaNoInicio(dado);

		if (pos == size+1)
			return adiciona(dado);

		auto e = head;

		for (int i = 0; i < pos-1; ++i)
			e = e->getProximo();


		e->setProximo(std::make_shared<Elemento<T>>(dado, e->getProximo()));

		++size;
	}
Example #12
0
/**
 NOME DA FUNÇÃO: adicionarContato
 ALUNOS: Pedro Paulo e Felipe dos Santos
 PROPÓSITO:
	É responsável por obter o contato a ser armazenado e encaminhá-lo à lista de maneira apropriada e por fim
	informar se tudo aconteceu de maneira correta.

 PARÂMETROS:
 nenhum

 VALOR DE RETORNO:
 nenhum

 CHAMA: exibeMenuSecundario, adiciona, adicionaNoInicio, adicionaNaPosicao, exibirMensagemErro

 CHAMADA DE: main
 */
void adicionarContato() {
	int opcao, posicao, resultado;
	tAgenda elemento;

	puts("Forneça o nome do contato: ");
	getchar();
	scanf("%[^\n]", &elemento.nome);
	puts("Forneça o número de telefone: ");
	scanf("%d", &elemento.numero);

	exibeMenuSecundario("Adicionar no");
	puts("3 - Adicionar em ordem");
	scanf("%d", &opcao);

	switch (opcao) {
	case 0:
		resultado = adiciona(elemento);
		break;
	case 1:
		resultado = adicionaNoInicio(elemento);
		break;
	case 2:
		puts("Forneça a posição a ser adicionada");
		scanf("%d", &posicao);
		resultado = adicionaNaPosicao(elemento, posicao);
		break;
	case 3:
		resultado = adicionaEmOrdem(elemento);
		break;
	default:
		puts("Opção Inválida");
		break;
	}

	if (resultado != 0)
		exibirMensagemErro(resultado);
}
Example #13
0
int main(int agrc, char *argv[]) {
	int sock, sock_req, addr_in_size, bytes_recv;
	sockaddr_in req_addr, serv_addr;
	char package[400];
	funcionario *f;

	if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
		perror("socket");
		exit(1);
	}

	serv_addr.sin_family = AF_INET;
	serv_addr.sin_port = htons(atoi(argv[1]));
	serv_addr.sin_addr.s_addr = INADDR_ANY;
	memset(&(serv_addr.sin_zero), '\0', 8);

	sem_init(&sem_fifo, 0, 1);
	sem_init(&sem_db, 0, 1);

	if(bind(sock, (sockaddr *)&serv_addr, sizeof(sockaddr)) == -1) {
		perror("bind");
		exit(1);
	}

	if(listen(sock, BACKLOG_SERV) == -1) {
		perror("listen");
		exit(1);
	}

	inicia_fifo(fifo_name);
	init_db(db);

	if(!fork()) {
		ler_fifo();
		exit(0);
	}

	while(1) {
		addr_in_size = sizeof(sockaddr_in);
		if((sock_req = accept(sock, (sockaddr *)&req_addr, &addr_in_size)) == -1) {
			perror("accept");
			continue;
		}

		if(!fork()) {
			close(sock);
			while((bytes_recv = recv(sock_req, package, sizeof(package), 0)) == -1) {
				perror("recv");
			}
			printf("Signal received from %s\n", inet_ntoa(req_addr.sin_addr));
			package[bytes_recv] = '\0';
			sem_wait(&sem_fifo);
			adiciona(fifo_name, package, req_addr);
			sem_post(&sem_fifo);
			
			close(sock_req);
			exit(0);
		}
		close(sock_req);
	}

	while(wait(NULL) > 0);
	return 0;
}
void roundrobin(int pid, int cpu, int io){
	 struct reg *atual;
	 atual=inicio;
	 while (atual != NULL){
	 	   
	 	   if(atual->pid < pid->prox)
	 	   
	 
	 
	 







main() {
  int op;
  do {


    printf("MENU - ESCALONADOR DE PROCESSOS\n\n");
    printf("----------------------\n");
    printf("Processos-----\n");
    printf("1. Adicionar\n");
    printf("2. Remover\n");
    printf("3. Listar\n");
    printf("4. Limpar\n\n");
    printf("Escalonadores ------\n");
    printf("5. Round Robin\n\n\n");


    printf("0. Sair\n\n");
    printf("Opcao: "); scanf("%d",&op);

    switch (op) {
      case 1: {
	  
	  int pid, pri, tipo, cpu, io;

	printf("Digite o PID: ");
	scanf("%d",&pid);
	printf("Digite o PRI: ");
	scanf("%d",&pri);

	while((tipo>3)||(tipo<1))
	{
	printf("Digite o TIPO (1-system/2-user/3-batch): ");
	scanf("%d",&tipo);
	}

	printf("Digite o CPU: ");
	scanf("%d",&cpu);
	printf("Digite o I/O: ");
	scanf("%d",&io);

	adiciona(pid, pri, tipo, cpu, io);


	break;
      }
      case 2: {
	if (inicio!=NULL) {
	  printf("Removendo... ");
	  apaga();
	  getch();
	}
	break;
      }
      case 3: {
	lista();
        getch();
	break;
      }
      case 4: {
	printf("Limpando...");
	limpar();
	getch();
	break;
      }
    
    case 5: {
		 
		 roundrobin(pid, cpu, io);
		 
		 getch();
		 break;
		 }
		 
    
	}
    
  } while (op!=0);
  limpar();
}
	void main(){
		char nome[10];
		char nome1[10];
		char nome2[10];
		int d;
		char i,h;
		struct ponteiro p;
		struct ponteiro q;
		struct pessoa *raiz=(struct pessoa *)malloc(sizeof(struct pessoa));//Alocamos memoria para a raiz da arvore
		printf("Qual a primeira pessoa da arvore genealógica?\n");
		gets(nome);
		raiz->nome=nome;
		raiz->geracao = 0;
		printf("%s\n", raiz->nome);	
		insira(raiz);//Começamos a raiz propriamente aqui
		
		printf("Adicionar mais alguem? <S/N>");
		scanf("%c", &h);
		if(h=='S' || h=='s'){
			adiciona(raiz);
		}
		
		printf("Deseja fazer mais alguma coisa? \n1-)imprimir os membros por geracao \n2-)imprimir os antepassados de alguem \n ");
		printf("3-) imprimir labelled bracketing \n4-) calcular grau de parentesco \n5-) encerrar programa\n");//Aqui temos o menu
		scanf("%c",&i);
		
		if(i='1'){
		
				printf("Qual geracao?");
				scanf("%i", &d);
				print_gen(raiz,d);
		}
		else if(i='2'){
		
			
				printf("De quem?");
				gets(nome);
				emordem(raiz);
		}
		
			else if(i='3'){
			
				imprimir_lb(raiz);
			}
		
			else if(i='4'){
			
				printf("Pessoa 1:");
				gets(nome1);
				printf("Pessoa 2");
				gets(nome2);
				
				
				
				if(p.ponteiro->geracao > q.ponteiro->geracao){
					grau(q.ponteiro, p.ponteiro, q.ponteiro->geracao);
				}else{
					grau(p.ponteiro,q.ponteiro, p.ponteiro->geracao);
				}
			}
			else{
				printf("Bye Bye");
			}
		}
Example #16
0
void atribui (voids *left, void *right) {
	adiciona (left, -1);
	*left = *right;
	adiciona (right, +1);
}
Example #17
0
void ListaElementosGeometricos::adicionaEmOrdem(const ElementoGeometrico*& data){
	
	adiciona(data);
}