Aller au contenu

Greywolf

Membres
  • Compteur de contenus

    9 320
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par Greywolf

  1. si c'est un modèle bg, c'est qu'elle supporte les 2 modes
  2. Re-bonsoir, j'ai quelques soucis à la compilation de mon code: int boucle(double *vector1, double *vector2, double *resultats, int *nbref, int *l) //la fonction boucle est appelée via R qui lui transmettra les arguments; Cf post "du C dans R" { //Déclaration des variables int i,j,count; //début de la boucle for (i=0;i<*l;i++) { int count = count1(*vector1,i); if (count <= *nbref) { int *next = indicenext(*vector1,*l, i); ... } else if (count >= *nbref) { int *prev = indiceprev(*vector1,i); .... } else { int *next = indicenext(*vector1,*l,i); int *prev = indiceprev(*vector1,i); ... } ... } return (0); } cette fonction boucle appelle 3 sous-fonctions : count1 , indicenext, indiceprev int count1 (double *vector1, int j) // j représente la longueur à tester de vector1; j <= *l { int i; int nb1; for (i=0;i<j;i++) { if (vector1[i] == 1) { nb1++; } } return nb1; } int *indicenext (double *v1, int *l, int j) { int i; int *p_indicenext; /* pointeur vers le tableau de résultats*/ int k = 0; p_indicenext = malloc((*l-j)* sizeof(int)); for (i=j;i<*l;i++) { if (*(v1+i) == 1) { *(p_indicenext+k)= i; k++; } } return ( *p_indicenext); } int *indiceprev(double *v1, int j) { int i; int *p_indiceprev; /* pointeur vers le tableau de résultats*/ int k = 0; p_indiceprev = malloc(j * sizeof(int)); for (i=0;i<j;i++) { if (*(v1+i) == 1) { *(p_indiceprev+k)= i; k++; } } return ( (int) *p_indiceprev); } Il n'y a aucun problème pour la fonction count1 Par contre, lors de la compilation, j'obtiens ces warning qui correspondent aux lignes d'appel des sous-fonctions indicenext et indiceprev dans boucle ainsi que la ligne 163 est l'accolade ouvrante de indicenext et la ligne 180 le return. J'obtiens les mêmes erreurs pour l'autre fonction, indiceprev, malgré le (int) dans la fonction return. J'ai bien essayé de comprendre mais je tourne en rond quels sont les conflicting types? j'ai bien essayé de "caster" l'integer lors de l'appel de la fonction int *next = indicenext(*vector1,*l, (int) i); mais sans succès :-/ moi pas comprendre... ne s'improvise pas programmeur qui veut
  3. oki c'était juste pour savoir si j'avais bien pigé. Yapuka
  4. arf oui, c'est de la déclaration => donc double *f(char[], void*); et pour l'appeller char chartab[] = "chaine de caractères"; int a = 8; double f(chartab, &a) { ... return *p; }
  5. résolu la fonction en C int FctA(double *vector1,double *vector2,double *resultats,int *l) /* *l est la taille du vecteur 1 */ { int i; for (i=0;i<*l;i++) { resultats[i]=(fabs(vector1[i])+fabs(vector2[i])) * vector2[i]; } return(0); } compilation en so, chargement sour R via dyn.load("nom de la bibliothèque .so") fonction d'appel sous R: calcul_FctA <- function(V1,V2) { res <- .C("FctA", as.double(V1), as.double(V2), res=double(length(V1)), ### cela revient à faire une malloc directement dans R afin de pouvoir récupéré les bonnes valeurs as.integer(length(V1))) return(res$res) } y'a plus qu'à appeller avec calcul_FctA(vecteur1,vecteur2) merci à Philippe du service bioinformatique de l'Institut Curie Il ne me reste plus qu'à réécrire d'autres fonctions un poil plus compliquées en C: une sous-fonction peut-elle renvoyer un pointeur? la déclaration double *f(char[] , &a); désigne-t-elle bien une fonction f qui prend comme argument un tableau de caractères plus un pointeur vers un objet a et qui retourne un pointeur vers un double ?
  6. j'ai commencé à bouquiner cette doc : http://cran.r-project.org/doc/manuals/R-exts.pdf notamment 5.2 Interface functions .C and .Fortran (page 52 & 53) et il faut que je mette mes vecteurs en double float si je comprends bien pour pouvoir les passer à la dll avec as.single() structure d'un vecteur dans R: vector (mode, length) avec mode : The atomic modes are '"logical"', '"integer"', '"numeric"','"complex"', '"character"' and '"raw"'.
  7. bon, j'ai modifié pour faire une sous-fonction; compilation OK mais toujours le problème de mapping mémoire sous R. Je vais éplucher la doc du site #include <stdio.h> #include <stdlib.h> #include <math.h> main() { int signed m[5] = {-12,6,4,0,-10}; int signed n[5] = {1,1,1,1,1}; int s = 5; fonctionR(m,n,s); } fonctionR (int* m,int* n,int s) { /* Déclaration des variables */ FILE *f; /* pointeur vers le fichier de résultat */ int *p_Fa; /* pointeur vers futur tableau de résultat Fa */ int *p_m; /*pointeur vers le vecteur1 = m */ int *p_n; /*pointeur vers le vecteur2 = n */ int signed Fa[s]; /* tableau de résultat de taille s passé en argument*/ int i; /* allocation mémoire pour les tableaux */ p_Fa = malloc(s * sizeof(int)); p_m = malloc(s * sizeof(int)); p_n = malloc(s * sizeof(int)); p_m = &m[0]; /* les pointeurs correspondent aux vecteurs passés en argument */ p_n = &n[0]; /* calcul de la fonctionA pour chaque battement */ f=fopen("resultats.txt","w"); for ( i = 0; i < s; i++ ) { p_Fa[i]= (fabs(p_m[i]) + fabs(p_n[i])) * p_n[i]; Fa[i] = *(p_Fa+i); printf("%d\n", Fa[i]); fprintf(f,"%d\n", Fa[i]); } fclose(f); }
  8. OK je modifie pour faire une sous_fonction à appeler dans R je vais regarder dans le Kernighan & Ritchie aucune idée, je vais creuser cette piste là tu marques un point mais faute de grives ... Merci des tuyaux
  9. ne serait-il pas plus simple de sauver mes vecteurs 1 et 2 dans des fichiers txt sous R et de les faire relire dans le programme C? je lis et je stocke le contenu du fichier dans un tableau jusqu'à EOF? comme ça plus de problème de malloc? et pour le malloc du tableau de résultat, déterminer le nombre de lignes d'un des 2 fichiers lus?
  10. Bonjour, au boulot, j'utilise beaucoup R ( http://www.r-project.org ) pour réaliser du traitement statistique de data et réaliser des graphiques. Seulement, ce langage étant non compilé, j'ai certaines boucles qui mettent un temps fou à s'éxécuter sous R. R permet d'appeller des objets compilés (.so ou dll) réalisés en Fortran ou en C. dyn.load("le nom de la dll") .Fortran("la fonction",arg1,arg2,.....) J'ai déjà réalisé ce type de chose pour faire de la tranformée de fourier appliquées à mes data dans R (aucun mérite, on m'a filé le code source et il m'a suffit de le compiler en so), c'est donc possible. Là je pars de zéro et ai voulu réaliser une dll en langage C pour "apprendre" . Problématique: j'ai 2 vecteurs (tableau 1D) d'entiers signés dans R de longueur identique mais variable d'une traitement de lot à un autre. Ces 2 vecteurs, ainsi que la longueur du vecteur, doivent être passés à la fonction C pour réaliser une bête boucle de calcul pour sortir un nouveau tableau 1D que j'écris dans un fichier (j'ai essayé un return du tableau mais apparemment la fonction ne renvoie que le pointeur vers le tableau :-/) qu'il sera possible de relire dans R. Mon problème vient, je pense, de l'allocation dynamique de la mémoire en fonction des 2 vecteurs envoyés à la fonction C => segfault. Pour commencer, j'ai compilé un exécutable stand-alone avec des vecteurs prédéfinis et une taille définie, ça marche: #include <stdio.h> #include <stdlib.h> #include <math.h> #define SIZE 5 /* taille des tableaux pour allocation mémoire */ main() { /* Déclaration des variables */ FILE *f; /* pointeur vers le fichier résultat */ int *p_Fa; /* pointeur vers futur tableau de résultat Fa */ int signed vecteur1[5] = {-12,6,4,0,-10}; int signed vecteur2[5] = {1,1,1,1,1}; int signed Fa[SIZE]; /* tableau de résultat */ int i; /* allocation mémoire pour le tableau de résultat */ p_Fa = malloc(SIZE * sizeof(int)); /* calcul de la fonctionA pour chaque battement */ f=fopen("resultats.txt","w"); for ( i = 0; i < SIZE; i++ ) { p_Fa[i]= (fabs(vecteur1[i]) + fabs(vecteur2[i])) * vecteur2[i]; Fa[i] = *(p_Fa+i); printf("%d\n", Fa[i]); fprintf(f,"%d\n", Fa[i]); } fclose(f); } pas d'erreur à la compilation, l'éxécution est OK. C'est maintenant que ça se gâte :-/ : modification du code pour que main() attende des arguments passés par R : .C("main", as.integer(m), as.integer(n), as.integer(s)) #include <stdio.h> #include <stdlib.h> #include <math.h> void main(int* m, int* n, int s) { /* Déclaration des variables */ FILE *f; /* pointeur vers le fichier de résultat */ int *p_Fa; /* pointeur vers futur tableau de résultat Fa */ int *p_m; /*pointeur vers le vecteur1 = m */ int *p_n; /*pointeur vers le vecteur2 = n */ int signed Fa[s]; /* tableau de résultat de taille s passé en argument*/ int i; /* allocation mémoire pour les tableaux */ p_Fa = malloc(s * sizeof(int)); p_m = malloc(s * sizeof(int)); p_n = malloc(s * sizeof(int)); p_m = &m[0]; /* les pointeurs correspondent aux vecteurs passés en argument */ p_n = &n[0]; /* calcul de la fonctionA pour chaque battement */ f=fopen("resultats.txt","w"); for ( i = 0; i < s; i++ ) { p_Fa[i]= (fabs(p_m[i]) + fabs(p_n[i])) * p_n[i]; Fa[i] = *(p_Fa+i); printf("%d\n", Fa[i]); fprintf(f,"%d\n", Fa[i]); } fclose(f); } le code se compile avec un warning: fonctionR2.c: In function 'main': fonctionR2.c:7: warning: return type of 'main' is not 'int' j'arrive à charger la dll dans R, vérifier que main est accessible mais erreur de segmentation: *** caught segfault *** address 0x9db40e00, cause 'memory not mapped' Voilà désolé pour la longueur. Si vous avez une petite idée
  11. Greywolf

    quel linux?

    La librairie QT utilisée par KDE est sous double licence (libre et propriétaire pour les OS fermés) depuis belle lurette. Le troll "KDE sapucépalibre" c'est fini maintenant.
  12. Greywolf

    client dns

    ça dépend de la configuration de ton réseau: IP fixe ou par DHCP?
  13. non, les ports utilisés par les logiciels p2p sont connus, il suffit de faire un scan horizontal sur une plage d'adresse IP pour le(s) port(s) en particulier pour trouver des machines connectées à internet et utilisant un soft de p2p (et ce malgré tes règles de firewall pour être furtif et tout le tralala; si tu regardes la règle que tu as créée pour ton log de p2p c'est "Autoriser toute connexion entrante sur le port quelquesoit sa provenance quelquesoit le protocole inscrit dans les trames" autrement dit les portes sont grandes ouvertes). A partir de là, on peut imaginer des exploitations de failles du logiciel (débordement de tampon pour obtenir un accès), envoi/récupération d'informations non sollicitées, saturation de la pile TCP/IP pour faire du DoS,..... Quelle différence avec d'autres types de serveurs comme Apache ou des serveurs ftp vous me direz? Ces protocoles sont très documentés et très connus. Un filtrage applicatif correct peut y être associé + IPS/IDS +du reverse proxying + processus contrôlés au niveau du système fonctionnant en tant qu'utilisateur sans pouvoir...
  14. Greywolf

    Convertir une video

    avi n'est pas un format mais un conteneur; on met ce que l'on veut dans du avi (c'est une boîte). Si la platine dvd ne lit pas les divX, il faudra créer un VCD/SVCD/DVD-video soit une video encodée au format MPEG1 (pour VCD) ou MPEG2 pour DVD. Si elle lit les divX, il faut s'assurer d'utiliser un format d'encodage compatible avec la platine: divX4, DivX5, xvid,... janus2fr, des précisions supplémentaires à apporter?
  15. les alignements phylogénétiques d'ARN 16 et 28S tendent à corroborer cette théorie de l'évolution. Les pressions de sélection environnementale favorise l'émergence de populations plus adaptées car ayant eu une mutation utile à l'instant t (bon après ce qu'on gagne d'un côté on le perd de l'autre...). Les phénomènes de co-évolution (virus/parasite-hôte) sont un des sujets les plus surprenants et passionants qui soient (pour peu que l'on s'y intéresse) Un des problèmes majeurs à l'heure actuelle n'est pas la théorie de l'évolution selon Darwin mais la perte de la diversité biologique dans tous les biotopes.
  16. http://chaos2.org/xpuyopuyo/
  17. On ne peut pas; cela est réservé à la modération. A moins de développer un hack IPB qui rajoute le bouton Fermer lorsque l'uid du membre qui visualise le topic coïncide avec l'uid du membre qui a débuté le topic, il conviendra de le demander à la modération par MP ou via le bouton . Cordialement,
  18. non, il faut passer nécessairement par l'interface de Free. les modifications sont appliquées au prochain redémarrage de la freebox.
  19. Greywolf

    Mon serveur linux plante

    une règle iptables anti-bruteforce pour ssh: http://forum.zebulon.fr/index.php?s=&s...st&p=729965
  20. disons que ton acharnement à vouloir débattre du p2p et d'obtenir une aide à la configuration de ce type de logiciels sur un espace web qui, pour en éviter les problèmes inhérents, a clairement inscrit que ce type de sujet n'y avait pas sa place doit y être pour quelque chose vu que sur les sites que tu as cité ils acceptent "les gens comme vous" . Le débat est utile s'il est encadré et s'il est argumenté. J'ai une amère expérience des débats à la française qui ressemblent plus à une foire d'empoignes qu'à autre chose...
  21. Je sens encore un soupçon d'ironie dans ce topic C'est si difficile que ça de respecter les règles fixées par celui qui vous offre cet espace de discussion ? Quand arriverez vous à comprendre que le webmaster est pénalement reponsable (ou co-responsable) de ce qui est diffusé publiquement sur son espace public? rmcinfo a peut-être les reins suffisamment solides pour assumer des topics qui partiraient en sucette (vous vous souvenez des sites fermés pour diffamation?), zebulon n'a pas ces capacités; donc allez y. Une ligne éditoriale a été fixée sur zebulon, la moindre des choses quand on vient en tant qu'invité chez quelqu'un, c'est d'y respecter la volontés de l'hôte. Chez moi, c'est non-fumeur et il n'est pas question que quelqu'un y vienne fumer, quitte à entraver sa liberté individuelle. Si la personne n'est pas capable de comprendre ça, elle n'est pas la bienvenue... je connais nombre de fumeurs qui s'y plient sans problème sans me faire de sermon sur le droit, les libertés,..... Les sujets que vous voulez aborder tourneront tous aux inévitables FUD, flamewar ou trolls poilus que nous voulons éviter ici (et qui ont été maintes et maintes fois abordés)... et oui, vous n'avez pas inventé la poudre avec vos tentatives de débats, désolé.
  22. c'est fou comme ces topics reviennent de manière sporadique et régulière..... Les raisons ont été données.
  23. Greywolf

    Réseau ad hoc

    en effet, ponter l'interface filaire et wifi du fixe permet de conserver le même adressage réseau du speedtouch (le pc se comporte comme un commutateur de niveau 2). Il conviendra d'indiquer l'adresse du routeur comme passerelle et DNS (ou ceux du FAI); en effet, il n'y a pas de partage de connexion internet avec un pont MAC (fonctionne en niveau 2 alors que le partage fonctionne en couche 3 (IP)). Avant de ponter, il serait judicieux de vérifier que la connexion en mode point à point (ad-hoc) fonctionne
  24. Greywolf

    Installer un script

    Ce script est utilisé pour bannir de votre serveur Shoutcast les programmes de "streamripping". Instructions: Remplissez la section server info avec les détails de votre serveur Shoutcast; téléchargez le script dans le répertoire racine de votre serveur; ouvrir la page avec un navigateur internet de votre choix et laissez le ouvert: la page se rafraichira toutes les 60 secondes et se chargera de bannir les streamrippers
  25. note: TTL Time To Live les adresses IP ne pointent pas vers www.speedguide.net (la première est un réseau nordique, la deuxième une machine de taiwan, le troisième AT&T,...) => réseaux différents, routes différentes, backbones différents... server.nordu.net (193.10.252.19) 15 routeurs traversés depuis chez moi le serveur tw 24 routeurs 204.127.135.135 (At&T) 14 routeurs.... le RTT moyen caractérise la qualité globale de la connexion en terme de temps de transit
×
×
  • Créer...