E ai galera!
Blz? Bom, desculpem pela demora de atualização, mas estou corrido mesmo no trabalho, e na faculdade também. Mas esta é a última semana de aula, e depois é só alegria! Bom, quanto as postagens, pretendo me policiar melhor, e começar o ano com uma meta de pelo menos uma postagem por semana. Digo começar o ano, porque estarei em Floripa para o natal e o ano novo, e pretendo me manter saudável o suficiente e não utilizar o computador durante essa semana hehehe.
Bom, o que irei passar hoje, é uma função que criei, onde faz uma leitura de um arquivo de configuração, e retorna para a string passada como argumento, e retorna 0 em sucesso ou 1 em erro, como padrão no Linux.
O código vem logo abaixo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int readConf(FILE *pfile, int delim, const char *key, char *buf){
char tmp[256];
char tmp2[256];
char tmp3[256];
int i, j;
while(fgets(tmp, 256, pfile)){
if(strchr(tmp, '#')){
strcpy(tmp3, strchr(tmp, '#'));
if(strlen(tmp3) == strlen(tmp)){
continue;
}
}
memset(tmp3, 0, 256);
if(strcpy(tmp3, strstr(tmp, key))){
memset(tmp2, 0, 256);
if(strchr(tmp3, '#')){
memset(tmp, 0, 256);
strcpy(tmp, strchr(tmp3, '#'));
strncpy(tmp2, tmp3, strlen(tmp3) - strlen(tmp)+1);
memset(tmp3, 0, 256);
strcpy(tmp3, strchr(tmp2, delim));
}
else
strcpy(tmp3,strchr(tmp, delim));
memset(tmp2, 0, 256);
for(i=1, j=0; i<strlen(tmp3)-1; i++){
if(tmp3[i] == ' ') {
continue;
}
tmp2[j]=tmp3[i];
j++;
}
strcpy(buf, tmp2);
return 0;
}
}
return 1;
}
Para compilar este código, basta inclui-lo como um reader, ou fazer um .so (shared object) mas isso não é um assunto para hoje.
Esta função deve ser utilizada dessa forma:
if(readConf(file, ':', "path_arquivos", buf)){
printf("Erro no leitura do path_arquivos!")
}
onde:
readConf -> Nome da função;
file -> Arquivo aberto onde será localizada a string;
: -> Caracter delimitador de configuração (pode ser alterado com '=' por exemplo);
path_arquivos -> string a ser localizada dentro do arquivo 'file'
buf -> String onde será retornado o valor da configuração
Para o arquivo ser lido, eu optei por passar o parametro do 'file' como um arquivo aberto lá fora mesmo, na main por exemplo, onde ele deve ser de um tipo FILE *
Outra coisa, o arquivo pode ser comentado também, na minha implementação, ele aceita o valor '#' para isso, mas caso queira alterar, fique a vontade, não é nem um pouco difícil!
Obrigado a todos e até a próxima!
Nenhum comentário:
Postar um comentário