Esercizio 1 Prova Pratica 12-09-11
Revision as of 12:06, 14 April 2015 by Davide.quadrelli2 (talk | contribs) (→Soluzione di Pierg e Quadrelli)
Siano date due directory del file system.
Il programma deve cercare i file .c e .h presenti nelle due directory evidenziando quali sono presenti in una sola
directory
Es:
$ cmpsource so.1.0 so.1.1
so.1.0/file.c not in so.1.1
so.1.1/head.h not in so.1.0
(L'ordine delle segnalazioni in output non e' importante).
Soluzione di Pierg e Quadrelli
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
/*funzione per avere l'estensione del file*/
const char *get_filename_ext(const char *filename) {
const char *dot = strrchr(filename, '.');
if(!dot || dot == filename) return "";
return dot + 1;
}
/*funzione per comparare tutti i file tra una e l'altra directory*/
void cmp(char *path1,char *path2){
DIR *dir1,*dir2;
struct dirent *f1,*f2;
int bol;
if((dir1=opendir(path1))==NULL){
perror("ERRORE DIR1");
exit(-1);
}
while((f1=readdir(dir1))!=NULL){
bol=0;
if(strcmp(get_filename_ext(f1->d_name),"c")==0 || strcmp(get_filename_ext(f1->d_name),"h")==0){
if((dir2=opendir(path2))==NULL){
perror("ERRORE DIR2");
exit(-1);
}
while((f2=readdir(dir2))!=NULL){
if(strcmp(f1->d_name,f2->d_name)==0){
bol=1;
break;
}
}
closedir(dir2);
if(!bol){
printf("%s/%s not in %s\n",path1,f1->d_name,path2);
}
}
}
closedir(dir1);
}
/*main del programma*/
int main (int argc, char *argv[]){
if(argc!=3){
perror("PARAMETRI ERRATI");
exit(-1);
}
cmp(argv[1],argv[2]);
cmp(argv[2],argv[1]);
return 0;
}