bue a écrit 15 commentaires

  • [^] # Re: man gethostname

    Posté par  . En réponse au message comment récupérer le HOSTNAME ?. Évalué à 1.

    Est-ce que quelqu'un peut m'envoyer un petit bout de code pour me montrer comment on utilise cette fonction...
    Est-ce qu'il faut faire appel à un header particulier ?

    Merci pour vos réponse
    Une question qui pourrait m'être utile pour la suite, où est-ce que je peux trouver des informations concernant les libraires et les fonctions disponible du système ?
  • [^] # Re: Correction

    Posté par  . En réponse au message Pointeur et chaines de caractères.... Évalué à 1.

    Encore une question où placer le free ?
    -après le return dans la fonction
    -dans la fonction appelante, une fois que le pointeur n'est plus utilisé ?

    Est-ce qu'il libere la mémoire de toutes les variables crées avec malloc, ou est-ce qu'on peut faire free(variable ou pointeur); ?
  • [^] # Re: Correction

    Posté par  . En réponse au message Pointeur et chaines de caractères.... Évalué à 1.

    Merci, ca marche ! J'ai juste un avertissement, je ne sais pas à cause de quoi c'est... :
    getenv.c:9: Warnung: implicit declaration of function `strdup'
    getenv.c:9: Warnung: Zuweisung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung

    Avec python, le programme que tu généres à besoin de librairies de python pour fonctionner sur le poste client, non ?
    Est-ce que tu peux utiliser toutes les librairies du système aussi ?
  • [^] # Re: Correction

    Posté par  . En réponse au message Pointeur et chaines de caractères.... Évalué à 1.

    Encore une fois merci pour ton aide... :p Je recois un message d'erreur comme quoi il y a un problème de compatibilité avec le type du pointeur à la ligne :
    quoted_env = strdup("NULL");
    Je ne comprend pas trop, tu me dis qu'il est mieux d'utiliser glib pour manipuler ce genre de chose, je pensais qu'en programmant en c j'utilisait automatiquement glib ? Quel language est selon toi plus adapté ? C++ ? Vu que c'est pour un client léger, il faut qu'il y ait le moins de librairies exterieures possibles... C++ est-il à certains égards plus simple ou est-ce que c'est purement du c avec les objets en plus ?
  • [^] # Re: Désolé

    Posté par  . En réponse au message Lire facilement un fichier de configuration. Évalué à 1.

    La compilation à marché ! ouf !
    Pourrais-tu me donner un bout de code ou les fonctions sont utilisées ? Ca manque sur le site...

    Merci pour ta patience, c'est mon tout premier programme, et j'ai encore beaucoup de choses qui m'échappent en c ;)
  • [^] # Re: Désolé

    Posté par  . En réponse au message Lire facilement un fichier de configuration. Évalué à 1.

    J'ai essayé en fait sans utiliser la fonction dans une autre fonction, j'ai simplement compiler mes fichiers et celui de confloader comme tu m'as indiqué et obtenu l'erreur plus haut...

    J'ai ensuite essayé d'ajouté le tableau dans ma fonction main, comme dans la doc et recompilé, même erreur !
  • [^] # Désolé

    Posté par  . En réponse au message Lire facilement un fichier de configuration. Évalué à 1.

    J'ai encore un problème :
    confloader.o(.text+0x91): In function `confparse':
    : undefined reference to `conf'
    confloader.o(.text+0xb3): In function `confparse':
    : undefined reference to `conf'
    confloader.o(.text+0xc3): In function `confparse':
    : undefined reference to `conf'
    confloader.o(.text+0xd4): In function `confparse':
    : undefined reference to `conf'
    confloader.o(.text+0x13b): In function `getconf':
    : undefined reference to `conf'
    confloader.o(.text+0x152): more undefined references to `conf' follow
    collect2: ld returned 1 exit status
    
  • [^] # Re: pub éhontée

    Posté par  . En réponse au message Lire facilement un fichier de configuration. Évalué à 1.

    J'ai essayé, mais j'ai une erreur de syntaxe dans le makefile justement là ou il y a la ligne "make -C confloader" Voilà l'erreur : "Makefile:24: *** missing separator."
    CC=gcc
    CFLAGS=-Wall -ansi
    LDFLAGS=-Wall -ansi
    EXEC=tsinventory
    
    all: $(EXEC)
    
    tsinventory: getenv.o getipaddress.o getmac.o confloader.o main.o
            $(CC) -o $@ $^ $(LDFLAGS)
    
    getenv.o: gentenv.c
            $(CC) -o $@ -c $< $(CFLAGS)
    
    main.o: main.c
            $(CC) -o $@ -c $< $(CFLAGS)
    
    getipaddress.o : getipaddress.c
            $(CC) -o $@ -c $< $(CFLAGS)
    
    getmac.o : getmac.c
            $(CC) -o $@ -c $< $(CFLAGS)
    
    confloader.o:
    make -C /confloader
    mv confloader/confloader.o
    
  • [^] # Re: pub éhontée

    Posté par  . En réponse au message Lire facilement un fichier de configuration. Évalué à 1.

    Merci pour ce programme, j'ai en revenche du mal à le faire fonctionner.

    Lors de la compilation, j'ai eu une erreur, ou plutot un avertissement :
    pavlovix:/prog_TS/confloader-0.1# make
    gcc -Wall -pedantic -ansi -O3 -c confloader.c -o confloader.o
    confloader.c:179:22: Warnung: Verwendung von C99 hexadezimaler Gleitkommakonstante
    confloader.c:179:41: Warnung: Verwendung von C99 hexadezimaler Gleitkommakonstante

    Je ne sais pas si c'est normal ?

    Deuxièmement, étant nouveau dans la programmation en c pour linux, je ne sais pas trop comment intégrer confloader dans mon code, j'ai fait comme indiqué dans la doc, j'ai crée un sous repertoire, maintenant comment faire au niveau de la compilation ?

    J'imagine que je dois compiler mon programme avec confloader
    gcc moprog.c confloader.c -o monprog.o ??

    Mais qu'est ce que je dois faire du confloader.h ?
    Désolé pour cette question qui doit être stupide, mais j'ai encore du mal à comprendre l'utilité et le conctionnement des headers, tout comme les casts... sujet pas abordé dans mon livre :(
  • # Probleme d'overflow ?

    Posté par  . En réponse au message comment récupérer l'adresse mac du pc ou s'execute le programme. Évalué à 1.

    Voilà le code que j'ai trouvé et modifier (il était en main() avant)
    Le problème c'est que le sprintf provoque un buffer overflow, j'ai des problèmes pour comprendre ces erreurs là.
    D'après ce que j'ai compris, il vaut mieux mettre les valeurs dans un buffer :
    char macaddress[128];
    sprinf(macaddress...);
    mais à ce moment là comment faire pour le return, ca n'a pas l'air de marcher ! il faut utiliser une autre commande ?

    Pour que je comprenne un peu mieux, quelle est la taille maximum d'un char * ?

    Désolé d'assommer tout le monde avec mes questions de newbie, mais mon livre ne couvre pas ces questions de base

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <netinet/in.h>
    #include <net/if.h>
    #include <sys/types.h>
    #include <arpa/inet.h>
    #include <sys/ioctl.h>
    #include <sys/socket.h>
    #include <netdb.h>


    char *getmac(char * interface)
    {
    int r;
    struct protoent *proto;
    int sock;
    struct ifreq ifr;
    char * macaddress;

    proto = getprotobyname("tcp");
    sock = socket(PF_INET,SOCK_STREAM,proto->p_proto);
    memset(&ifr,0,sizeof(struct ifreq));
    strcpy(ifr.ifr_name,interface);
    r = ioctl(sock,SIOCGIFHWADDR,&ifr);
    if(r != 0)
    {
    printf("Couldn't get mac address\n");
    exit(1);
    }
    sprintf(macaddress,"%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
    (unsigned char)ifr.ifr_hwaddr.sa_data[0],
    (unsigned char)ifr.ifr_hwaddr.sa_data[1],
    (unsigned char)ifr.ifr_hwaddr.sa_data[2],
    (unsigned char)ifr.ifr_hwaddr.sa_data[3],
    (unsigned char)ifr.ifr_hwaddr.sa_data[4],
    (unsigned char)ifr.ifr_hwaddr.sa_data[5]);
    printf("L'adresse mac est : %s",macaddress);
    return(macaddress);
    }
  • [^] # Re: ioctl et SIOCGIFFLAGS

    Posté par  . En réponse au message comment récupérer l'adresse mac du pc ou s'execute le programme. Évalué à 1.

    Mes plus plattes excuses, j'ai mal lu ton message...
    Lorsque j'ai vu google, je me suis dis ca y est c'est typique, encore quelqu'un qui me renvoie bêtement sur Internet comme si je n'avais jamais touché de navigateur de ma vie...

    Donc encore une fois "excuses-moi", et merci pour ta réponse
  • [^] # Re: allocation de chaine

    Posté par  . En réponse au message Probleme de memoire, sprintf. Évalué à 2.

    Merci pour ta réponse, je vais essayer, dis-moi la taille du buffer est en nombre de caractères ?
  • [^] # Re: http://www.brics.dk/~kasperd/comp.os.linux.development.faq.html

    Posté par  . En réponse au message comment récupérer l'adresse mac du pc ou s'execute le programme. Évalué à 1.

    Merci pour ce lien, effectivement j'y ai trouvé un tout petit bout de code qui répond parfaitement à mes besoins !
    Un GRAND merci !
  • [^] # Re: Euh

    Posté par  . En réponse au message comment récupérer l'adresse mac du pc ou s'execute le programme. Évalué à 1.

    Merci pour ta réponse,

    Pour tout te dire, ce code ce destine à Thinstation, soit une version minimaliste de linux, d'où le besoin d'écrire le programme en c (parce que d'ajouter python ou perl augmenterai la taille de l'OS, et ne serait pas forcement performent sur une toute vieille becane)
    En fait, dans mon cas, l'interface qui m'intéresse est toujours eth0, donc ca simplifie le probleme...

    De chercher l'information dans ifconfig, j'y ai aussi pensé, mais quand je me suis apercu qu'il n'y avait pas de fonctions substring et autres et qu'il fallait passer par la mémoire etc... j'avoue que j'ai pris peur ;) et je me suis aussi dit qu'il devait bien y'avoir un moyen plus direct de faire ca et que c'était un peu bête d'utiliser un programme (ifconfig) qui cherche aussi l'information quelque part... pour ensuite rechercher dans la sortie standard... conceptuellement je trouvais ca un peu dommage, mais si tu pense que c'est le mieux... je vais bien y etre obligé.
  • [^] # Re: ioctl et SIOCGIFFLAGS

    Posté par  . En réponse au message comment récupérer l'adresse mac du pc ou s'execute le programme. Évalué à 1.

    Merci de tes conseils pour la recherche google, mais tu penses bien que j'ai essayé ca avant de faire un post non ?