Oui bon c'etait pour voir si vous suiviez mais ce script est buggé et je suis incapable de le faire fonctionner :
le $FIND_NAME n'est pas compris tel quel dans la commande find. J'ai essayé toutes les combinaisons : ' \" etc etc...
FIND_NAME=-name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
find ./ -type f $FIND_NAME
n'output pas ce qu'il ferait sans passer par FIND_NAME.
(
en faisant :
find ./ -type f -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
Ca marche.
)
Le projet est constitué déjà de plusieurs lib mais ceratines parties de codes communes sont "customisées" suivant le tye de binaire à compiler.
C'est choix sont réalisés par le passage d'option à configure. (utilisation des autotools). D'une manière générale, le besoin se fait sentir à partir du moment ou l'on travaille avec des options à configure et que l'on a besoin de travailler en parrallèle sur l'ensemble des binaires.
Voici un petit script que j'ai réalisé :
===========================================================
#!/bin/bash
MY_REP=$CWD
FIND_NAME=-name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
cd $SERVER
find ./ -type f $FIND_NAME -exec rm {} \;
cd $CLIENT
find ./ -type f $FIND_NAME -exec cp --parent -l {} $SERVER/ \;
cd $MY_REP
===========================================================
ATTENTION bien initialiser SERVER et CLIENT sinon ca efface tout le home !
Y'a sans doute mieux... notamment parsing de la sortie de cvs (mais comment s'intégrer à emacs) et gestion des repertoires vides.
Et bien je n'ai pas envie de devoir killer mon bash en ineractif
Et si je reste sur le script je trouve plus simple le TRAP qui ne demande a l'utilisateur que de faire juste un CTRL-C...
De toute maniere j'aimerais bien comprendre pourquoi ca ne fonctionne pas en ligne de commande ... ?
PPS : bon le trap exit INT n'est pas interessant en interactif, mais j'aimerais pouvoir utiliser le trap break INT dans le while ...
Bon pour conclure la glibc n'implemente pas, pour l'instant, les comportements non-greedy (ou lazy quoi) du type *? +? ou encore ?? ce qui est tres bizarres car quasi vitale en regex mais il y a une solution :
Pour cela, il faut utiliser la lib PCRE. (pcre_exec, pcre_compile ...)
Bon du coup je poste pas de code je risque de pas etre fully compatible ANSI C ISO 99... Des fois que ca jetterai le trouble chez quelques personnes... ANSI rigides...
Bon c'est bien gentil tout ca mais le but c'est pas d'avoir 20/20 a mon exo et que le prof soit content de moi mais de faire rapidement un petit exemple qui compile pour que les gens m'aide à resoudre mon probleme.... Merci de ne pas debattre de savoir si il faut mettre (void) plutot que () dans int main() ou autre par la suite, CA NE M'INTERESSE PAS.
Je n'ai pas essayé tes solutions mais pour la premiere elle risque d'aller pointer sur malloc et free de la libc ne changeant pas le probleme.
Je me suis rendu compte que le simple fait d'exporter mes malloc et free dans le programme avec meme proto meme nom que les malloc et free originaux suffisait pour qu'ils soient pris en compte. du coup je defini malloc et free sans utiliser les hook et j'appelle __libc_malloc et __libc_free dans le code de malloc et free respectivement.
Je pense que les hook n'offrent pas de moyens d'etre thread safe.
effectivement c'est ce que j'avais fait. le probleme vient lorsque tu as cette sequence :
Thread 1:
appel de malloc
->my_malloc_hook
->pthread_mutex_lock(&mutex); //mutex non pris a ce moment
-> __malloc_hook = old_malloc_hook;
(old_malloc_hook est initialise au valeurs nominale à l'init et jamais modifié)
-> appel de malloc normal car __malloc_hook a été restaurer
La le scheduler lance un autre thread qui appel dans la sequence malloc :
Thread 2 :
...
appel de malloc
a ce moment le __malloc_hook est initialisé a la valeur par defaut (par Thread 1) et donc c'est le malloc standard qui est réalisé, moralité Thread2 n'est pas en attente sur le mutex car il ne passe pas par my_malloc_hook mais directement par le malloc standard...
Il faudrait que j'appelle la fonction qui réalise réellement le malloc (qui n'est qu'un wrapper) a la place de malloc(size) ligne 3, mais je ne la connais.
J'ai essayé __libc_malloc mais elle utilise aussi __malloc_hook.
Utilisé old_malloc_hook (en utilisant direcctement ret_ptr) n'a rien donné car elle sont à nul par défaut, malloc devant utilisé un autre système quand _malloc_hook n'est pas instantié par l'utilisateur.
Merci bien pour ton aide.
Il faudra que je test un peu mieux tout ca mais a priori, seul le dli_fname est rempli avec le nom du fichier binaire et dli_sname est à nul...
addr2line fonctionne tres bien lui ...
Voici mon utilisation de mem_get_info
ptr est une adresse programme valide et dl_info une structure non initialisée.
dladdr renvoie toujours different de 0 et dli_sname est positionnée à null.
Juste pour clarifier les choses :
__cyg_profile_func_enter(&MaString, void *callsite) et son pendant sur exit sont des fonctions qui permettent de tracer toutes les entrees et sorties de fonctions d'un programme.
Il suffit qu'elles soient definies dans ta table des symboles pour qu'elles soient automatiquement utilisées (...enter appellés sur appel de fonction et ...exit sur le retour).
Ceci juste pour dire que je choisis pas le proto de ces fonctions et que je dois bien faire avec...!
Merci quand meme pour ton soutien...!
Bon donc c'est normal a priori de commencer à 21...
Je vien de regarder canal +, l'image est un peu crade mais ca marche bien et j'ai le son... Il faudrait creuser cote uvh et tout ca.. je vais regarder
Merci
Merci pour ta participation :)
Et bien sur ma tele ca marche bien, j'ai toutes les chaines qu'il faut (1-6)...
Sinon que penses tu du log de scantv :
est-ce que ca te semble normal que les chaines commence à 21 et pas à 1 ? (En dehors des K... et H.. dont je ne sais rien)??
Merci pour ta reponse.
J'avais pensé à QEMU mais apparement il a l'air relativement gourmand niveau perfos (comme je voulais tirer le meilleur parti de ma machine).
Je vai aller voir coté UML dont je n'avais pas entendu parler ...
J'entends bien que c'est possible avec deux machines , (c'est d'ailleurs ce que j'ai fait lorsque je me suis rendu compte que je n'arrivais pas a mes fins avec une seule) simplement je me demandais comme ca histoire de pas mourir idiot s'il n'y avait pas un moyen qui m'aurait alors permis d'economiser une machine ?
Oui effectivement mais je ne suis pas intéressé par tester la relation client serveur sans la gateway.
une passerelle est une machine reliée à deux réseaux différentys.
C'est exact... Et c'est bien ce que j'ai en ayant deux interfaces dans deux sous reseaux differents.
En fait mon probleme c'est que lorsque je ping une ip, le noyau regarde d'abord si l'ip est sur ces interfaces avant de regarder ses tables de routages.
J'ai le meme resultat si j'utilise la capacite de bind (-I) du ping.
La je comprends pas le 64 a la fin ... si c'est pour les deux entiers si je calcule ca nous fait 10 caracteres ( voir 11 pour les negatifs ) l'entier donc la vingtaine les deux, les quelques espaces etc etc... on va dire la trentaine le tout ?.
Tout à fait d'accord je les ai essayé et ils ne sont pas évident du tout à manipuler (notamment pour ce qui est de la nécessité de déclarer explicitement l'ensemble des variables à partager, mais aussi leurs valeurs ...)
Par contre je me suis permis de remarquer que tu avais un module GUI, ... alors un bon conseil si par hasard tu utilises Gtk2 n'utilise pas les threads perl, d'après mon expérience ce n'est pas compatible.
Il vaut mille fois mieux utiliser le sequencer de la glib pour scheduler differentes parties du code (ex : Glib::Timeout)...
Mea Culpa, apparemment autofs n'est pas aussi approprié que fstab pour ton besoin...
Il apparait donc plus logique d'utiliser fstab (et de regler le probleme la) que de deporter le probleme en utilisant autofs ....
----------->[]!
Pour la première partie de ta question, tu peux certainement utiliser autofs.
Desole je ne connais pas très bien la conf mais c'est le process qui va te monter automatiquement tes disques en fonction de fichier de confs
Fait un man autofs pour plus de precision ...
Desole de ne pas pouvoir t'en dire plus ...
[^] # Re: Include
Posté par Pierre Mallard . En réponse au message CVS et fichiers hard-linkés. Évalué à 1.
#!/bin/bash
MY_REP=$CWD
mkdir -p $SERVER
cd $SERVER
find ./ \( -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]" \) -exec rm {} \;
cd $CLIENT
find ./ \( -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]" \) -exec cp --parent -l {} $SERVER/ \;
cd $MY_REP
exit 0
[^] # Re: Include
Posté par Pierre Mallard . En réponse au message CVS et fichiers hard-linkés. Évalué à 1.
le $FIND_NAME n'est pas compris tel quel dans la commande find. J'ai essayé toutes les combinaisons : ' \" etc etc...
FIND_NAME=-name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
find ./ -type f $FIND_NAME
n'output pas ce qu'il ferait sans passer par FIND_NAME.
(
en faisant :
find ./ -type f -name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
Ca marche.
)
[^] # Re: Include
Posté par Pierre Mallard . En réponse au message CVS et fichiers hard-linkés. Évalué à 1.
C'est choix sont réalisés par le passage d'option à configure. (utilisation des autotools). D'une manière générale, le besoin se fait sentir à partir du moment ou l'on travaille avec des options à configure et que l'on a besoin de travailler en parrallèle sur l'ensemble des binaires.
Voici un petit script que j'ai réalisé :
===========================================================
#!/bin/bash
MY_REP=$CWD
FIND_NAME=-name "*.in" -o -name "*.am" -o -name "*.sh" -o -name "*.[ch]"
cd $SERVER
find ./ -type f $FIND_NAME -exec rm {} \;
cd $CLIENT
find ./ -type f $FIND_NAME -exec cp --parent -l {} $SERVER/ \;
cd $MY_REP
===========================================================
ATTENTION bien initialiser SERVER et CLIENT sinon ca efface tout le home !
Y'a sans doute mieux... notamment parsing de la sortie de cvs (mais comment s'intégrer à emacs) et gestion des repertoires vides.
[^] # Re: a savoir
Posté par Pierre Mallard . En réponse au message Je suis toujours à l'heure d'hiver !!. Évalué à 1.
dans /etc/conf.d/clock
CLOCK="local" au lieu de CLOCK="UTC"
Merci beaucoup !!
[^] # Re: PID
Posté par Pierre Mallard . En réponse au message SIGINT dans une boucle infinie. Évalué à 1.
Et si je reste sur le script je trouve plus simple le TRAP qui ne demande a l'utilisateur que de faire juste un CTRL-C...
De toute maniere j'aimerais bien comprendre pourquoi ca ne fonctionne pas en ligne de commande ... ?
PPS : bon le trap exit INT n'est pas interessant en interactif, mais j'aimerais pouvoir utiliser le trap break INT dans le while ...
# PCRE
Posté par Pierre Mallard . En réponse au message regex.h Lazy Mode. Évalué à 2.
Pour cela, il faut utiliser la lib PCRE. (pcre_exec, pcre_compile ...)
Bon du coup je poste pas de code je risque de pas etre fully compatible ANSI C ISO 99... Des fois que ca jetterai le trouble chez quelques personnes... ANSI rigides...
[^] # Re: Une idee comme ça...
Posté par Pierre Mallard . En réponse au message regex.h Lazy Mode. Évalué à 2.
[^] # Re: Je suis pas sur d'avoir compris mais
Posté par Pierre Mallard . En réponse au message malloc_hook et multithread. Évalué à 1.
Je me suis rendu compte que le simple fait d'exporter mes malloc et free dans le programme avec meme proto meme nom que les malloc et free originaux suffisait pour qu'ils soient pris en compte. du coup je defini malloc et free sans utiliser les hook et j'appelle __libc_malloc et __libc_free dans le code de malloc et free respectivement.
Je pense que les hook n'offrent pas de moyens d'etre thread safe.
En tout cas merci pour ton aide.
[^] # Re: Je suis pas sur d'avoir compris mais
Posté par Pierre Mallard . En réponse au message malloc_hook et multithread. Évalué à 3.
Thread 1:
appel de malloc
->my_malloc_hook
->pthread_mutex_lock(&mutex); //mutex non pris a ce moment
-> __malloc_hook = old_malloc_hook;
(old_malloc_hook est initialise au valeurs nominale à l'init et jamais modifié)
-> appel de malloc normal car __malloc_hook a été restaurer
La le scheduler lance un autre thread qui appel dans la sequence malloc :
Thread 2 :
...
appel de malloc
a ce moment le __malloc_hook est initialisé a la valeur par defaut (par Thread 1) et donc c'est le malloc standard qui est réalisé, moralité Thread2 n'est pas en attente sur le mutex car il ne passe pas par my_malloc_hook mais directement par le malloc standard...
Il faudrait que j'appelle la fonction qui réalise réellement le malloc (qui n'est qu'un wrapper) a la place de malloc(size) ligne 3, mais je ne la connais.
J'ai essayé __libc_malloc mais elle utilise aussi __malloc_hook.
Utilisé old_malloc_hook (en utilisant direcctement ret_ptr) n'a rien donné car elle sont à nul par défaut, malloc devant utilisé un autre système quand _malloc_hook n'est pas instantié par l'utilisateur.
[^] # Re: libdl
Posté par Pierre Mallard . En réponse au message Une librairie pour convertir les adresses de programmes en nom de fonction ou de fichier et ligne ??. Évalué à 1.
Il faudra que je test un peu mieux tout ca mais a priori, seul le dli_fname est rempli avec le nom du fichier binaire et dli_sname est à nul...
addr2line fonctionne tres bien lui ...
Voici mon utilisation de mem_get_info
ptr est une adresse programme valide et dl_info une structure non initialisée.
dladdr renvoie toujours different de 0 et dli_sname est positionnée à null.
static void mem_get_info(void * ptr,Dl_info * dl_info){
if (!dladdr(ptr, dl_info)){
dl_info->dli_fname = "error";
dl_info->dli_sname = "error";
}
}
Que devrais je m'attendre à avoir dans dli_sname (la ligne C, le numero de ligne ??)
[^] # Re: alors la je dis tout de suite
Posté par Pierre Mallard . En réponse au message Une librairie pour convertir les adresses de programmes en nom de fonction ou de fichier et ligne ??. Évalué à 1.
__cyg_profile_func_enter(&MaString, void *callsite) et son pendant sur exit sont des fonctions qui permettent de tracer toutes les entrees et sorties de fonctions d'un programme.
Il suffit qu'elles soient definies dans ta table des symboles pour qu'elles soient automatiquement utilisées (...enter appellés sur appel de fonction et ...exit sur le retour).
Ceci juste pour dire que je choisis pas le proto de ces fonctions et que je dois bien faire avec...!
Merci quand meme pour ton soutien...!
[^] # Re: coupleur UHF VHF ?
Posté par Pierre Mallard . En réponse au message Pinnacle PCTV Studio/Rave. Évalué à 1.
-C' est quoi un coupleur UHF VHF ?
-Le probleme peut il venir du driver ?
[^] # Re: coupleur UHF VHF ?
Posté par Pierre Mallard . En réponse au message Pinnacle PCTV Studio/Rave. Évalué à 1.
[^] # Re: coupleur UHF VHF ?
Posté par Pierre Mallard . En réponse au message Pinnacle PCTV Studio/Rave. Évalué à 1.
Je vien de regarder canal +, l'image est un peu crade mais ca marche bien et j'ai le son... Il faudrait creuser cote uvh et tout ca.. je vais regarder
Merci
[^] # Re: coupleur UHF VHF ?
Posté par Pierre Mallard . En réponse au message Pinnacle PCTV Studio/Rave. Évalué à 1.
Et bien sur ma tele ca marche bien, j'ai toutes les chaines qu'il faut (1-6)...
Sinon que penses tu du log de scantv :
est-ce que ca te semble normal que les chaines commence à 21 et pas à 1 ? (En dehors des K... et H.. dont je ne sais rien)??
[^] # Re: gateway et compagnies ...
Posté par Pierre Mallard . En réponse au message Emulation Server Client sur la meme machine. Évalué à 1.
J'avais pensé à QEMU mais apparement il a l'air relativement gourmand niveau perfos (comme je voulais tirer le meilleur parti de ma machine).
Je vai aller voir coté UML dont je n'avais pas entendu parler ...
[^] # Re: gateway et compagnies ...
Posté par Pierre Mallard . En réponse au message Emulation Server Client sur la meme machine. Évalué à 1.
[^] # Re: gateway et compagnies ...
Posté par Pierre Mallard . En réponse au message Emulation Server Client sur la meme machine. Évalué à 1.
C'est exact... Et c'est bien ce que j'ai en ayant deux interfaces dans deux sous reseaux differents.
En fait mon probleme c'est que lorsque je ping une ip, le noyau regarde d'abord si l'ip est sur ces interfaces avant de regarder ses tables de routages.
J'ai le meme resultat si j'utilise la capacite de bind (-I) du ping.
# Je veux pas chipoter mais ...
Posté par Pierre Mallard . En réponse au message Xlib - bords actifs - demande conseils. Évalué à 3.
et le caractère nul a la fin ?
execute_programm = (char *) malloc(strlen(argv[1])+1)
La je comprends pas le 64 a la fin ... si c'est pour les deux entiers si je calcule ca nous fait 10 caracteres ( voir 11 pour les negatifs ) l'entier donc la vingtaine les deux, les quelques espaces etc etc... on va dire la trentaine le tout ?.
Bon je chipotte... ==================>[ ]
[^] # Re: sed ou vi
Posté par Pierre Mallard . En réponse au message substitution d'une chaine dans un fichier texte. Évalué à 2.
Ctl-Alt-% c'est encore mieux la ! :)
[^] # Re: ces réactions sont contradictoires..
Posté par Pierre Mallard . En réponse au journal Lutte antispam ... radicale. Évalué à 4.
Tu veux dire comme toi ou ... ?
[^] # Re: Thread perl
Posté par Pierre Mallard . En réponse au message les threads .... Évalué à 2.
Par contre je me suis permis de remarquer que tu avais un module GUI, ... alors un bon conseil si par hasard tu utilises Gtk2 n'utilise pas les threads perl, d'après mon expérience ce n'est pas compatible.
Il vaut mille fois mieux utiliser le sequencer de la glib pour scheduler differentes parties du code (ex : Glib::Timeout)...
Voila ...!
[^] # Re: autofs
Posté par Pierre Mallard . En réponse au message MONTAGE AUTOMATIQUE ET ACCES DES FICHIERS. Évalué à 2.
Il apparait donc plus logique d'utiliser fstab (et de regler le probleme la) que de deporter le probleme en utilisant autofs ....
----------->[]!
# autofs
Posté par Pierre Mallard . En réponse au message MONTAGE AUTOMATIQUE ET ACCES DES FICHIERS. Évalué à 2.
Desole je ne connais pas très bien la conf mais c'est le process qui va te monter automatiquement tes disques en fonction de fichier de confs
Fait un man autofs pour plus de precision ...
Desole de ne pas pouvoir t'en dire plus ...
# Heu ...
Posté par Pierre Mallard . En réponse au message Utilisation de Net::LDAP. Évalué à 2.
Je me trompe ou $login et $motdepasse ne sont pas initialisés ??