int checkCreateDB(char *nome){ int id = -2; if(!existeArquivo("fs_database.dat")){//se o arquivo com os nomes dos bancos não existir ele é criado. grava_banco(nome); return 0; } //verificando se o nome do banco já existe em fs_database.dat id = busca(nome,1);//se encontrar o banco já cadastrado retorna seu id //retorno de funcao indicando sucesso if(id == -2) { grava_banco(nome); } else { return -3; } return 0; }
int enviaNomeComando(conexao *conn,char *comando){ byte *dados; size_t tamanho, restantes; Pacote p; if (!existeArquivo(comando)) return 0; tamanho = strlen(comando); dados = (byte *)comando; if(tamanho <= MAX_TAM_DADOS){ if (strstr (comando, "get ") != NULL) criaPacote(&p,tamanho,G,dados); if (strstr (comando, "put ") != NULL) criaPacote(&p,tamanho,P,dados); if (strstr (comando, "cd ") != NULL) criaPacote(&p,tamanho,C,dados); if (strstr (comando, "ls") != NULL) //criaPacote(&p,tamanho,L,(byte*)'0'); criaPacote(&p,tamanho,L,dados); }else{ printf ("Tamanho do comando muito grande!!\n"); return 0; } if (enviaPacote(conn,&p) == 0) return -1; return 1; }
//busca por nome do banco se estiver cadastrado retorna a id dele int busca(char *str, int identificacao){//a identificacao indicara qual if será executado id_max = 0; int cod_retorno; FILE *file; db *database = (db *)malloc(sizeof(db)); if (database == NULL) { printf("Out of memory.\n"); abort(); } if(!existeArquivo("fs_database.dat")) return -1; int cod = (cod_id_db(1)), cont = 1; file = fopen("fs_database.dat", "r"); if(file != NULL) { for(; cont < cod; cont++){ fread(&database->cod,sizeof(int),1,file); fread(&database->nome,sizeof(char),TAM_NOME_BANCO,file); if (id_max < database->cod) id_max = database->cod; if(identificacao == 1) { if(!strcmp(str,database->nome)) { fclose(file); cod_retorno = database->cod; if(database != NULL)free(database); return cod_retorno; } } if(identificacao == 2) { printf("\nDatabase: %s", database->nome); } } } else { printf("\nCannot open fs_database!\n"); } if(database != NULL)free(database); fclose(file); return -2; }
int main(int argc, char** argv){ FILE *file; struct dados d; if((existeArquivo("logData.log")) == SUCESS){ if((file = fopen("logData.log", "rb")) == NULL){ printf("Nao possivel abrir arquivo!\n"); } fseek(file, 0, SEEK_SET); }else{ printf("Arquivo nao existe!"); return FAIL; } while(fread(&d, sizeof(struct dados), 1, file) == 1){ printf("Data: %d/%d/%d Hora: %d:%d:%d Comando %d: %s\n", d.t.dia, d.t.mes, d.t.ano, d.t.hora, d.t.min, d.t.seg, d.id_comando, d.comando); } return SUCESS; }
/** * Imprime o nome dos banco de dados existentes. */ void listaBancos() { FILE *file; db *database = (db *)malloc(sizeof(db)); if (database == NULL) { printf("Out of memory.\n"); abort(); } if(!existeArquivo("fs_database.dat")) { printf("No database created.\n"); } int quant_db = (cod_id_db(1)), cont = 1; file = fopen("fs_database.dat", "r"); if(file != NULL) { for(; cont < quant_db; cont++){ fread(&database->cod,sizeof(int),1,file); fread(&database->nome,sizeof(char),TAM_NOME_BANCO,file); printf("%s\n", database->nome); } } else { printf("\nCannot open fs_database!\n"); } if(database != NULL)free(database); fclose(file); }
int main (int argc, char** argv){ int i = 1; FILE *file; struct tm *pt; struct dados d; if((existeArquivo("logData.log")) == FAIL){ if((file = fopen("logData.log", "wb")) == NULL){ printf("Nao possivel criar arquivo!\n"); return FAIL; } }else{ if((file = fopen("logData.log", "rb+")) == NULL){ printf("Nao possivel abrir arquivo!\n"); return FAIL; } fseek(file, 0, SEEK_END); } while(strcmp(d.comando, "exit") != SUCESS){ printf("$ "); gets(d.comando); system(d.comando); d.id_comando = i; pt = pegaTempo(); copiaTempo(&d, pt); if(fwrite(&d, sizeof(struct dados), 1, file) == 1){ printf("Elemento gravado com sucesso!\n"); }else{ printf("Nao foi possivel gravar elemento!\n"); } } fclose(file); return SUCESS; }
void shell() { current_database = -1; char entrada[1000], nomeBD[TAM_NOME_BANCO]; int resultado = 0, codDB = -1; nomeBD[0]='\0'; char *current_db_name = strdup(">");//inicializa com nenhum banco conectado char *start; start = strdup("dbms-start");//este comando posteriormente como start do banco, no momento ele é automatico printf("\nWelcome to the DBMS Interface.\nType 'help' '\\h' for help.\n\n"); /** * **************************** * * Comandos do shell * * **************************** */ using_history ();//função para usar o histórico read_history (".history_file"); while(1) { int nTokens; strcpy(entrada, readline(current_db_name)); /** * Adiciona ao histórico */ if (entrada[0]) { char *expansion; int result; result = history_expand (entrada, &expansion); if (result) fprintf (stderr, "%s", expansion); if (result < 0 || result == 2) { free (expansion); continue; } add_history (expansion); strncpy (entrada, expansion, sizeof (entrada) - 1); free (expansion); write_history (".history_file");//adiciona no histórico } char **tokens = tokenize( trim_white_space(remove_newline(entrada)),' ',&nTokens); /** * Opção para criar tabela e banco de dados */ if (strcmp(strtolower(tokens[0]),"create")==0) { if(strcmp(strtolower(tokens[1]),"table")==0) { if (current_database == -1) { printf("Not connected to any database.\n"); continue; } createTable(entrada,current_database); } else if(strcmp(strtolower(tokens[1]),"database")==0) { if (nTokens >= 5) { printf("Invalid command. Type help to show de interface usage.\n"); continue; } if (strlen(tokens[2]) > TAM_NOME_BANCO ) { printf("Database name too big.\n"); continue; } resultado = checkCreateDB( remove_semicolon(tokens[2]) );//verifica a existência do nome e grava-o no arquivo if(resultado==-1) { printf("Error creating database file.\n"); } if(resultado==-3) { printf("Database exists.\n"); } else { printf("Database created successfully.\n"); } } else { printf("Invalid command. Type help to show de interface usage.\n"); continue; } } /** * Conecta ao banco de dados passado como parâmetro */ else if(strcmp(strtolower(tokens[0]),"\\c") == 0){ if (nTokens != 2) { printf("Invalid number of arguments. Type help to show the interface usage.\n"); continue; } char *name_db = remove_semicolon(tokens[1]); codDB = busca(name_db,1); //função chamada para conecção no banco, retorna o codigo do banco ao conectar if (codDB >= 0) { strcpy(nomeBD, name_db); //passa o nome do bd, para a variavel mostrar ao usuario qual o banco conectado free(current_db_name); current_db_name = (char*) malloc (sizeof(char)*(strlen(name_db)+3)); if (current_db_name == NULL) { printf("Out of memory.\nAborting...\n"); } strcpy(current_db_name,name_db); current_database = codDB; strcat(current_db_name,"=#"); current_db_name[strlen(current_db_name)] = '\0'; } else { printf("No such database '%s'.\n", name_db); continue; } } /** * Insere tuplas em uma tabela */ else if(strcmp(strtolower(tokens[0]),"insert")==0) { if (current_database == -1) { printf("Not connected to any database.\n"); continue; } insert(entrada,current_database); } /** * Imprime as tabelas do banco de dados atual * ou o esquema de uma tabela */ else if(strcmp(strtolower(tokens[0]),"\\d")==0) { if (current_database == -1) { printf("Not connected to any database.\n"); continue; } if (nTokens >= 3) { printf("Invalid number of arguments. Type help to show the interface usage.\n"); continue; } else if (nTokens == 1) { //imprime tabelas do banco de dados listaTabelas(current_database); } else { //imprime o esquema de uma tabela char *t = table_name_real(remove_semicolon(tokens[1]),current_database); if(!verificaNomeTabela(t)){ printf("Invalid table name.\n"); free(t); continue; } struct fs_objects objeto = leObjeto(t);//para verificar se a tabela esta no banco show_schema(objeto,tokens[1]); free(t); } } /** * Comando temporário para imprimir tabela */ else if (strcmp(strtolower(tokens[0]),"select")==0) { if (current_database == -1) { printf("Not connected to any database.\n"); continue; } selectTable(entrada,current_database); } /** * Imprime os registros da tabela passada */ else if (strcmp(strtolower(tokens[0]),"show")==0) { if (nTokens != 2) { printf("Invalid number of arguments. Type help to show the interface usage.\n"); continue; } if (current_database == -1) { printf("Not connected to any database.\n"); continue; } if (verificaNomeTabela(table_name_real(remove_semicolon(tokens[1]),current_database) ) == 0 ) { printf("Table %s doesn't exist.\n",remove_semicolon(tokens[1])); continue; } char *t = table_name_real(remove_semicolon(tokens[1]),current_database); char *file = table_name_real(remove_semicolon(tokens[1]),current_database); strcat(file,".dat"); if (existeArquivo(file) == 0) { printf("Table is empty.\n" ); continue; } imprime(t); free(file); free(t); } /** * Lista os bancos existentes */ else if(strcmp(strtolower(tokens[0]),"\\l")==0) { if (nTokens != 1) { printf("Invalid number of arguments. Type help to show the interface usage.\n"); continue; } //LISTA os bancos existentes listaBancos(); } /** * Opção para deletar o banco de dados e tabelas */ else if(strcmp(strtolower(tokens[0]),"drop")==0) { if (nTokens != 3) { printf("Invalid number of arguments. Type help to show the interface usage.\n"); continue; } else if(strcmp(strtolower(tokens[1]),"table") == 0){ if (current_database == -1) { printf("Not connected to any database.\n"); continue; } if (verificaNomeTabela(table_name_real(remove_semicolon(tokens[2]),current_database) ) == 0 ) { printf("Table %s doesn't exist.\n",remove_semicolon(tokens[2])); continue; } char *t = table_name_real(remove_semicolon(tokens[2]),current_database); char *exist = table_name_real(remove_semicolon(tokens[2]),current_database); int ok = excluirTabela(t); if (ok == SUCCESS) { printf("Table deleted successfully.\n"); } free(exist); free(t); } else if(strcmp(strtolower(tokens[1]),"database") == 0){ char *exist = table_name_real(remove_semicolon(tokens[2]),current_database); strcat(exist,".dat"); if (existeArquivo(exist) != 0) { printf("The database is not empty for drop, there are existing tables.\n" ); continue; } exist = remove_semicolon(tokens[2]); codDB = busca(exist,1); if(codDB == current_database) { printf("Cannot drop the currently open database.\n"); continue; } int drop = dropDatabase(remove_semicolon(tokens[2])); if(drop == 1)printf("Database deleted successfully.\n"); free(exist); } } /** * Ajuda ao usuário com exemplos da sintaxe dos comandos */ else if (strcmp(strtolower(tokens[0]),"help")==0 || strcmp(strtolower(tokens[0]),"\\h")==0) { if (nTokens != 1) { printf("Invalid number of arguments. Type help to show the interface usage.\n"); } help(); } /** * Imprime mensagem de copyright */ else if(strcmp(strtolower(remove_semicolon(tokens[0])),"\\copyright")==0) { printf("\nDatabase Management System\n"); printf("\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose, without fee, and without a written agreement\nis hereby granted, provided that the above copyright notice and this\nparagraph and the following two paragraphs appear in all copies.\n"); printf("\nTHIS SOFTWARE IS BEING DEVELOPED BY STUDENTS OF DATABASE II CLASS AT UNIVERSIDADE FEDERAL DA FRONTEIRA SUL.\n\n"); } /** * Comando de saída */ else if(strcmp(strtolower(remove_semicolon(tokens[0])),"exit")==0) { break; } else if(strcmp(strtolower(remove_semicolon(tokens[0])),"quit")==0) { break; } else if(strcmp(strtolower(remove_semicolon(tokens[0])),"bye")==0) { break; } else if(strcmp(strtolower(remove_semicolon(tokens[0])),"\\q")==0) { break; } else { printf("Invalid command. Type help to show the interface usage.\n"); continue; } } free(start); free(current_db_name); }
void example() { int ok = checkCreateDB("UFFS");//cria banco caso não exista current_database = busca("UFFS",1); if (!ok) { int nrTabelas = 3; int nTabela[nrTabelas]; table *tab[nrTabelas]; column *colunas; int object, schema; object = existeArquivo("fs_object.dat"); schema = existeArquivo("fs_schema.dat"); nTabela[0] = existeArquivo(table_name_real("Aluno",current_database)); nTabela[1] = existeArquivo(table_name_real("Inst",current_database)); nTabela[2] = existeArquivo(table_name_real("Inscri",current_database)); if(!nTabela[0]){ tab[0] = iniciaTabela(table_name_real("Aluno",current_database)); //Cria a tabela tab[0] = adicionaCampo(tab[0], "CPF" , 'I', (sizeof(int)) ,PK,"",""); //Cria os atributos tab[0] = adicionaCampo(tab[0], "Nome" , 'S', 20 ,NPK,"",""); tab[0] = adicionaCampo(tab[0], "Endereco", 'S', 20 ,NPK,"",""); tab[0] = adicionaCampo(tab[0], "Peso" , 'D', (sizeof(double)),NPK,"",""); finalizaTabela(tab[0],current_database); } if(!nTabela[1]){ tab[1] = iniciaTabela(table_name_real("Inst",current_database)); tab[1] = adicionaCampo(tab[1], "CodInst" , 'I', (sizeof(int)) ,PK , "",""); tab[1] = adicionaCampo(tab[1], "Nome" , 'S', 20 ,NPK, "",""); tab[1] = adicionaCampo(tab[1], "Endereco" , 'S', 20 ,NPK, "",""); tab[1] = adicionaCampo(tab[1], "Reitor" , 'S', 10 ,NPK, "",""); finalizaTabela(tab[1],current_database); } if(!nTabela[2]){ tab[2] = iniciaTabela(table_name_real("Inscri",current_database)); tab[2] = adicionaCampo(tab[2], "CodMat" , 'I', (sizeof(int)) ,PK, "",""); tab[2] = adicionaCampo(tab[2], "CPF" , 'I', (sizeof(int)) ,FK, table_name_real("Aluno",current_database),"CPF"); tab[2] = adicionaCampo(tab[2], "CodInst" , 'I', (sizeof(int)) ,FK , table_name_real("Inst",current_database),"CodInst"); tab[2] = adicionaCampo(tab[2], "Curso" , 'S', 20 ,NPK,"",""); finalizaTabela(tab[2],current_database); } //Inserção de tuplas na tabela1 colunas = NULL; colunas = insereValor(tab[0],colunas, "CPF", "123456"); colunas = insereValor(tab[0],colunas, "Nome", "Rogerio"); colunas = insereValor(tab[0],colunas, "Endereco", "Rua Marechal"); colunas = insereValor(tab[0],colunas, "Peso", "81.4"); finalizaInsert(table_name_real("Aluno",current_database), colunas); colunas = NULL; colunas = insereValor(tab[0],colunas, "CPF", "654321"); colunas = insereValor(tab[0],colunas, "Nome", "Ricardo"); colunas = insereValor(tab[0],colunas, "Endereco", "RuaClevela"); colunas = insereValor(tab[0],colunas, "Peso", "88.9"); finalizaInsert(table_name_real("Aluno",current_database), colunas); colunas = NULL; colunas = insereValor(tab[0],colunas, "CPF", "1234567"); colunas = insereValor(tab[0],colunas, "Nome", "Natan"); colunas = insereValor(tab[0],colunas, "Endereco", "RuaDelmi"); colunas = insereValor(tab[0],colunas, "Peso", "58.9"); finalizaInsert(table_name_real("Aluno",current_database), colunas); //Inserção de tuplas na tabela2 colunas = NULL; colunas = insereValor(tab[1],colunas, "CodInst", "111"); colunas = insereValor(tab[1],colunas, "Nome", "UFFS"); colunas = insereValor(tab[1],colunas, "Endereco", "RuadeTerra"); colunas = insereValor(tab[1],colunas, "Reitor", "MandaChuva"); finalizaInsert(table_name_real("Inst",current_database), colunas); colunas = NULL; colunas = insereValor(tab[1],colunas, "CodInst", "222"); colunas = insereValor(tab[1],colunas, "Nome", "CEFET"); colunas = insereValor(tab[1],colunas, "Endereco", "RuadePedra"); colunas = insereValor(tab[1],colunas, "Reitor", "MandaVento"); finalizaInsert(table_name_real("Inst",current_database), colunas); colunas = NULL; colunas = insereValor(tab[1],colunas, "CodInst", "333"); colunas = insereValor(tab[1],colunas, "Nome", "UNOESC"); colunas = insereValor(tab[1],colunas, "Endereco", "RuadeAsfal"); colunas = insereValor(tab[1],colunas, "Reitor", "MandaAgua"); finalizaInsert(table_name_real("Inst",current_database), colunas); //Inserção de tupla na tabela3 colunas = NULL; colunas = insereValor(tab[2],colunas, "CodMat", "1401"); colunas = insereValor(tab[2],colunas, "CPF", "123456"); colunas = insereValor(tab[2],colunas, "CodInst", "333"); colunas = insereValor(tab[2],colunas, "Curso", "CC"); finalizaInsert(table_name_real("Inscri",current_database), colunas); colunas = NULL; colunas = insereValor(tab[2],colunas, "CodMat", "1402"); colunas = insereValor(tab[2],colunas, "CPF", "654321"); colunas = insereValor(tab[2],colunas, "CodInst", "222"); colunas = insereValor(tab[2],colunas, "Curso", "CC"); finalizaInsert(table_name_real("Inscri",current_database), colunas); colunas = NULL; colunas = insereValor(tab[2],colunas, "CodMat", "1403"); colunas = insereValor(tab[2],colunas, "CPF", "1234567"); colunas = insereValor(tab[2],colunas, "CodInst", "111"); colunas = insereValor(tab[2],colunas, "Curso", "ADM"); finalizaInsert(table_name_real("Inscri",current_database), colunas); } current_database = -1;//não existe nenhum banco logado }