Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Erreur lecture fichier.db
#1
Bonjour,
Mon robot marche avec vhost dans une fichier.db sous le nom de "hosts.db" hors si je fait trop de fois une meme commande (exemple: !eggdrop) le robot plante avec l'erreur suivante:
[01:54] Erreur tcl : can not find channel named "couldn't open "scripts/clams/sources/hosts.db": file table overflow"

A l'interieur du fichier.db les vhosts sont ligne par ligne sous la forme "vhost lvl" (Exemple pour la ligne1 : test.eggdrop.fr 1)

Malheuresement je ne comprend pas cette erreur si quelqu'un a deja eu cette erreure et peut m'expliquer cela serais bien gentil.
#2
A vue de nez, tu ouvres des handles sur des fichiers (avec open) que tu ne refermes jamais (avec close).

Ceci dit, sans voir ton code, on peut supposer un peu tout et n'importe quoi, y compris l'éventualité que tu aies foutu dedans la ligne suivante :
tcl
putlog {[01:54] Erreur tcl : can not find channel named "couldn't open "scripts/clams/sources/hosts.db": file table overflow"}

Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#3
Oui, excusez moi de l'erreur voici ci-dessou le code tcl qui appel les vhosts dans le fichier hosts.db

tcl
proc verify:host {pseudo} {
	catch {open [clams:install_directory]sources/hosts.db r} channel
	while {![eof $channel]} { 
		gets $channel hosts
		set ident [lindex $hosts 0]
		set host [lindex $hosts 1]
		set lvl [lindex $hosts 2]
		set ok_host 0
		set ok_ident 0
		if {$host eq $::chost($pseudo)} { 
			if {$ident eq $::ident($pseudo) || $ident eq "any"} {
				return $lvl
			}
		}
	}
	catch {close $channel}
	return 0
}

#4
C'est bien ce que je disais donc, tu ne fermes pas les fichiers que tu ouvres au moyen de "close" et au bout d'un moment tu dépasses le nombre maximum de handles ouverts.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#5
Je doit dire que la je suis dans le flou
#6
la ligne return $lvl met fin à ta procédure en retournant le contenu de la variable $lvl; par conséquent, quand cela se produit, la ligne catch {close $channel} n'est pas exécutée et le handle reste ouvert.

Après un certain nombre d'utilisations de ta commande, les handles restés ouverts se sont cumulés jusqu'à atteindre la limite maximum autorisée par ton eggdrop et tu obtiens cette erreur.

La solution est de remplacer
tcl
if {$ident eq $::ident($pseudo) || $ident eq "any"} {
     return $lvl
}

par
tcl
if {$ident eq $::ident($pseudo) || $ident eq "any"} {
     close $channel
     return $lvl
}

Et au passage, pourquoi utiliser catch lors de l'ouverture et de la fermeture ?
Il existe une panoplie de commandes pour vérifier l'existence d'un fichier ou non, le droit de le lire/écrire ou non, etc...
Plutôt qu'utiliser catch pour que les erreurs ne soient pas gênantes, gère-les.

Jette un oeil aux commandes suivantes :
file exists
file readable
file writable
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#7
Ouki je vais voir demain matin les commandes que tu m'a cité , merci beaucoup.


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Résolu] Erreur lors de la lecture d'un fichier heretoc 3 5,181 25/12/2012, 23:12
Last Post: CrazyCat
  [Resolu] Ajout de couleur durant une lecture de fichier heretoc 0 3,512 16/12/2012, 02:10
Last Post: heretoc
  Lecture fichier (ou bdd) heretoc 5 5,613 15/06/2011, 23:31
Last Post: heretoc

Forum Jump:


Users browsing this thread: 1 Guest(s)