/*
8800 index.html /home/jlgd/
Ejemplos de uso de funciones necesarias para el desarrollo de la practica 1
Al incluirlas de cualquier forma en la entrega deben ser completadas sus cabeceras,
y los convenientes controles de error anadidos
Compila: gcc -Wall -o ejemplos ejemplos.c
Autor: Jose Luis Garcia Dorado
2017 EPS-UAM
**/
#include
#include
#include
#include
//AÑADIR CABECERA! (obligatorio para usar esta funcion), al menos:
//Nombre funcion, fecha
//Funcionalidad, para que sirve/que hace
//Entrada
//Salida
//Comentarios
int funcion1(char *tipo, char* extension) {
FILE *faux;
tipo[0]=0;
char comando[1000]={0};
if(strlen(extension)==0)
return 1;
sprintf(comando,"awk '{for(i=2;i<=NR;i++){if($i==\"%s\")print $1}}' /etc/mime.types",extension);
faux=popen(comando,"r");
if(faux==NULL){
printf("ERROR abriendo fichero auxilar popen\n");
return -1;
}
fscanf(faux,"%s",tipo);
pclose(faux);
if(strlen(tipo)==0)
return 1; //No encontrado!
return 0; //Encontrado!
}
//AÑADIR CABECERA! (obligatorio para usar esta funcion)
//OJO a los retornos
int funcion2(int *portno, char *recurso_defecto, char *directorio_de_recursos, char* nombre_fichero) {
FILE *f;
char linea[1000]={0};
f=fopen (nombre_fichero,"r");
if(f == NULL){
printf("Error al abrir el fichero de configuración (%s).\n",nombre_fichero);
return -1;
}
if (fgets(linea,1000,f) == NULL){
printf("Error a leer el fichero de configuración.\n");
return -1;
}
if (fgets(linea,1000,f) != NULL){
printf ("--Leido %s--\n",linea);
sscanf (linea, "%d %s %s", portno, recurso_defecto, directorio_de_recursos);
}
else {
printf("Error al leer el fichero de configuración.\n");
return -1;
}
fclose(f);
return 0;
}
//AÑADIR CABECERA! (obligatorio para usar esta funcion)
int funcion3(char *ruta_fichero,char *nombre_fichero, struct stat * info) {
char ruta_y_nombre_de_fichero[1024]={0};
strcat(ruta_y_nombre_de_fichero,ruta_fichero);
strcat(ruta_y_nombre_de_fichero,"/");
strcat(ruta_y_nombre_de_fichero,nombre_fichero);
printf("\nA buscar --%s--\n",ruta_y_nombre_de_fichero);
if(stat(ruta_y_nombre_de_fichero,info)!=0)
return -1;
else
return 0;
}
//Ejemplos de uso de las funciones dadas
int main(int argc, char *argv[])
{
char tipo[256]={0};
int ret, portno=0;
char extension[64]={0};
char recurso_defecto[1000]={0}, directorio_de_recursos[1000]={0};
struct stat info;
//f1
sprintf(extension,"%s","movie");
ret=funcion1(tipo,extension);
printf("El mime type de %s es %s (retorno=%d)\n",extension,tipo,ret);
sprintf(extension,"%s","sdfsdgfdg");
ret=funcion1(tipo,extension);
printf("El mime type de %s es %s (retorno=%d)\n",extension,tipo,ret);
sprintf(extension,"%s","html");
ret=funcion1(tipo,extension);
printf("El mime type de %s es %s (retorno=%d)\n",extension,tipo,ret);
sprintf(extension,"%s","pdf");
ret=funcion1(tipo,extension);
printf("El mime type de %s es %s (retorno=%d)\n",extension,tipo,ret);
sprintf(extension,"%s","");
ret=funcion1(tipo,extension);
printf("El mime type de %s es %s (retorno=%d)\n",extension,tipo,ret);
//f2
sprintf(extension,"%s","");
ret=funcion2(&portno, recurso_defecto, directorio_de_recursos,"ejemplos.c");
printf("Se ha leido un puerto=%d_, un recurso por defecto=%s_, y un directorio de recursos=%s_\n",portno,recurso_defecto,directorio_de_recursos);
//f3
ret=funcion3("/etc/","mime.types", &info);
printf("El fichero mime.types tiene un tamano de %ld bytes.\n\n",info.st_size);
return 0;
}