faq_mc326

FAQ MC326

Atualizado: 10/04/2008 20:58

TP3:

P A avail list deve ficar junto com a base de dados. Como saber então como ler a base, já que ela tinha um padrão certinho antes, agora vai ficar com essas informações sobrando no fim...

R: A avail list usa os espaços dos registros apagados. Ela não fica no final da base e o padrão continua.

P: Posso colocar um {*/|/n/etc} logo depois do nrr na avail list?

R: Precisa? ;)

P: Quando abrimos um arquivo com 'w', ele já tratora tudo que tinha lá antes. Ou seja, pra escrever naquele espaço vazio do arquivo como que faz?

R: "r+"

P: Vamos deixar a avail list na ram durante a execução e só gravar ela qndo sair do programa ou cada vez que for inserir algo lemos do arquivo?

A avail list NÃO FICA EM RAM. Ela é uma lista invertida em disco.

TP2:

Estávamos tendo problemas para fazer a leitura da base para a criação dos indices.

Nossa ideia era ir varrendo a base registro por registro e armazenando as PKs. Para isso usamos fseek para avançar pelo arquivo, fgets para fazer a leitura da string e feof para detectar o fim do arquivo (como condição do loop).

Porém o loop q varria a base não terminava, pois por algum motivo a condição do while(!feof(base)) nunca ficava TRUE.

Resolvemos o problema usando a própria fgets de leitura. Pelo manual da função vimos que seu valor de retorno é NULL caso o fim do arquivo seja alcançado. Assim, usamos ela no teste do loop e o resultado foi o correto, resolvendo o problema. (1 a menos \o/)

Pelo visto, apesar do nome, feof não eh uma boa função nesse caso. Mas não pesquisei o motivo dela não se comportar como esperava.

Henrique

P. Não podem haver htmls na submissão, mas eu uso um .html como "gabarito" no meu programa para gerar os relatórios! Não posso mandá-lo?

R. Claro que pode. O que quis dizer foi que os htmls de resultado não podem ser enviados, pois o programa deve ser capaz de gerá-los sempre que o usuário desejar.

P.Quando tento compilar meu programa usando -lefence, aparece a mensagem: gcc: -lefence: linker input file unused because linking not done

R. Você está colocando o -lefence no lugar errado. Ele é uma biblioteca de linkagem, só deve ser colocado como parametro na linha que efetua a linkagem, ou seja, a que possui a opção -o e não possui -c.

P. Quando tento compilar meu programa usando -lefence, aparece a mensagem:/usr/bin/ld: cannot find -lefence

R. Instale o pacote electric fence no seu linux. Ele já está instalado nos computadores do IC. O método de instalação varia de acordo com a distribuição usada. Se for debian ou gentoo, eu posso ajudar.

P. O programa deve proibir entradas de registros cujo titulo já exista na base?

R. O programa deverá proibir violações de chave primária. obras de mesmo autor não são violações de PK, mas mesmo título sim e, caso não sejam proibidas, representam uma violação da integridade da base de dados.

P.Para o vetor que utilizaremos para armazenar as chaves primarias e NRR precisamos utilizar memoria dinamica ou podemos apenas admitir um tamanho grande de vetor?

R: DEVE ser dinâmica. Seria uma solução muito, muito ruim assumir um número máximo de registros.

P: Ola, se a gente comentar um arquivo .h, o .c correspondente tambem tem que ser comentado?

R: Sim, mas nao do mesmo jeito. No .h vc comenta a função, entradas e saidas, no .c vc comenta como a função funciona

são finalidades diferentes.

P: Qual o formato em que deve ser salvo o arquivo contendo as chaves primarias e suas posicoes?

R: o grupo decide.

P: Se nao deve ser mandado esse arquivo com o TP mas deve ser mandada a base de dados, o programa deve gerar um arquivo novo de chaves primarias quando aberto caso este nao exista mas uma base de dados sim?

R: ele deve ser mandado sim.

P: O HTML a ser gerado para listar as obras deve ser gerado por uma funcao (uma possivel opcao ao usuario) ou apenas quando o programa for finalizado?

R: toda consulta gera um html de resultado (provavelmente sobrescrevendo o mesmo)

P: O arquivo de chaves primarias pode ser aberto e fechado mais de uma vez durante a execucao do programa?

(pensamos em escrever um novo arquivo para estas apos cada nova insercao na base e, portanto, a cada nova insercao de chaves primarias para que pudessemos mais facilmente organizar tal arquivo possuindo sempre uma versao atualizada deste)

R: não, neste TP somente no inicio e final da execução do programa. Mesmo pq as alterações só serão salvas no fclose, se o programa der problema, fica do "mesmo tamanho". Resumindo: Abra o arquivo no ínicio, leia tudo, feche. No final, abra com 'w', escreva tudo e feche.

P: Eu acabei de fazer a ordenação pela chave primária usando um vetor e salvei num arquivo a chave primária e a posição relativa.

Agora que eu fui fazer a função pra listar todos os registros ordenadamente surgiu uma dúvida.

Eu devo usar o vetor que eu já tenho ordenado ou acessar os dados pelo arquivo que tem a chave primaria e a posição relativa?

R: No TP2, use o da RAM. Carregue do disco no ínicio e salve no final.

P: Esse arquivo com a chave primária e a posição relativa deve ser criado no início da execução do programa ou só quando o usuário chamar uma consulta.

R: Não é uma situação "natural" ter a base sem os indices, mas acontece nesta disciplina pelo curso das coisas. Quando for carrega-lo no inicio do programa, se ele não existir, crie.