1

Bonjour,

je viens de faire un programme qui parcours les fichiers du repertoire courant et me retrouve facilement ceux que je recherche. Le voici :

int
get_nb_file (Piv_t piv)
{
struct dirent *dp;
DIR *df;
int i;
int nbbucket = 0;
char *occ = strdup (BUCKETPREFIX);
int j;
if ((df = opendir(".")) == NULL)
{
SYSERR(ERR, "get_nb_file: cannot opendir%s", " ");
stop_slave(STATUS_ERROR, piv);
}
while((dp = readdir(df)) != NULL)
{
j = strlen(occ);
for (i = 0; i<j; i++)
if (dp->d_name[i] != occ[i])
break;
if (i < j)
continue;
nbbucket ++;
}
closedir(df);
free(occ);

MSG(DBG,"get_nb_file: found %d file in directory",nbbucket);
return (nbbucket);
}


Actuellement donc je voudrais pouvoir rechercher les memes fichiers a travers un reseau constitue de deux ordinateurs. Certains fichiers se retrouvent sur un autre ordinateur du reseau. Quelqu'un peut-il m'aider?

Merci d'avance.

2

Non.
Ton problème est loin d'être trivial, vu que les fonctions de gestion de fichiers servent à gérer des fichiers. Pas des connexions à d'autres ordinateurs.
Le plus simple c'est de mapper dans le système de fichiers les objets distants, ce qui rend l'opération transparente
Léger détail : si c'est très simple à utiliser après, c'est bien lourd à mettre en place en général.

Sinon si tu veux quand même énumérer les fichiers sur un serveur, il faut que tu implémentes le protocole avec lequel tu vas accéder le serveur (smb, ftp, ssh, http...). Mais comme je disais, tu as devant toi un problème beaucoup plus compliqué qu'une simple énumération.
Regarde éventuellement si tu peux pas trouver des bibliothèques de fonctions implémentant le protocole que tu souhaites employer.

3

si c juste de la recherche et pas du transfert, le mieux est de créer un petit serveur à qui tu envoies une requete qui recherche des fichiers sur la machine et renvoie le résultat, et ensuite de faire un client qui permet de rechercher sur une liste d'ip, comme ça tu mets ton serveur sur chaque machine et avec ton client tu recherche sur les deux.
niveau sécurité, pense au moins à faire du filtrage d'ip sur le serveur.
un protocole répondant à une seule requete est assez facile à créer et sécuriser, si tu dois ensuite faire du transfert, ça sera un peu plus dur. mais si tu as des machines homogènes tu n'es pas obligé de t'en préoccuper.
faut penser à gérer un minimum les droits aussi smile.

un exemple:

le client envoie sur sa liste d'ip de serveurs
->"SEARCH toto.txt\n"

le serveur verifie que le client est bien dans la liste d'ip autorisées, effectue la recherche et renvoie:
<- "FOUND /home/toto/toto.txt\nFOUND /foo/toto.txt\n"
ou
<-" NOTFOUND\n"

dans ton client qui t'a affiché les résultats pour chaque machine tu lances la récupération du fichier sur le bon serveur
-> "GET /home/toto/toto.txt\n"

le serveur verifie que le client est bien dans la liste d'ip autorisées, et renvoie le contenu
<- "FILE /home/toto/toto.txt\n(contenu encodé correctement entre autres pour LE BE ...)"
ou
<-" NOTFOUND\n"

sinon, tu montes le /home de tes autres ordis en NFS, ro et tu utilises locate, c le moins con tongue
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

4

merci

je vais essayer ta methode BookeldOr.

5

Sinon, en java ça devrait être très simple je pense.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

6

Tu penses mal. Le langage ne change rien au problème.
A moins que Java n'implémente le protocole SMB dans la JDK ? j'ai quelques doutes quand même.

7

spectras > en fait j'ai compris qu'il ne voulait pas tout ce que propose smb
ce qu'il veut c'est simplement interroger un pc pour lui demander de chercher un fichier, et accessoirement le copier sur l'autre, pas de travailler dessus de façon transparente à travers le réseau, parcourir le système de fichiers, etc...

d'ailleurs accessoirement, si tu n'as pas envie de t'amuser à le programmer en dur(j'ai compris que tu voulais le programmer en tout cas),
un simple script utilisant ssh et locate devrait faire largement l'affaire
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay

8

spectras :
Tu penses mal. Le langage ne change rien au problème. A moins que Java n'implémente le protocole SMB dans la JDK ? j'ai quelques doutes quand même.

Je ne sais pas trop en fait.
Mais il me semble que la prise en charge du réseau est très poussée.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

9

ouais mais comme dans tous les langages modernes,
la seule grosse différence c'est que ça te bouffe autant de CPU que de BP (cf par exemple azureus)...</troll trop évident pê>
avatar
fabetal_ > Hier, je me suis fait monter par un pote
redangel > et en chevals, ça donne quoi?
Nil> OMG I think I'm gay