IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

programme de reception du fichier par le noyau en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut programme de reception du fichier par le noyau en C
    salut , je suis entrain de faire un programme d'envoi de fichier entre l'espace utilisateur et le noyau, le programme d'envoi par l'utilisateur a bien être compilé mais malheureusement, j'ai eu des erreurs lors de compilation du programme du réception de fichier par le noyau, notant que j'utilise make comme compilateur.
    voici mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    # include <linux/sched.h>
    # include <linux/netlink.h>
    # include <net/sock.h>
    # include <stdlib.h>
    #include <stdio.h>
    #include <sys/sendfile.h> 
    # include <net/net_namespace.h>
    # define NETLINK_NITRO 17
     
    MODULE_LICENSE("GPL");
    int main ()
    {
     
    static struct sock *nl_sk = NULL;
     
    static void nl_data_ready (struct sk_buff *skb)
    {
     
       struct nlmsghdr *nlh = NULL;
       if(skb == NULL) {
       printk("skb is NULL \n");
       return ;
       }
       nlh = (struct nlmsghdr *)skb->data;
       printk(KERN_INFO "%s: received netlink message payload: %s\n", __FUNCTION__,
                  (char *) NLMSG_DATA(nlh));
     
    }
     
    static void netlink_test()
    {
     
    nl_sk = netlink_kernel_create(&init_net,NETLINK_NITRO,0, nl_data_ready,NULL, THIS_MODULE);
     
    }
    ssize_t sendfile(int fichier , int sock_fd , off_t * offset, size_t count);
    {
     FILE* fichier = NULL;
     
        fichier = fopen("/home/ahlem/GPL.odt" , "r+");
     
        if (fichier != NULL)
        {
    return 0 ;// On lit et on écrit dans le fichier
        }
     
    fclose(fichier) ;
    }
     
    sock_release(nl_sk->sk_socket);
    }
     
    module_init(my_module_init);
    module_exit(my_module_exit);


    s'il vous plait j'attend vos suggestions et conseils ... merci

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    voilà les erreurs :

    [root@Ahlem bin]# make
    make -C /lib/modules/2.6.32-220.7.1.el6.x86_64/build M=/home/ahlem/bin modules
    make[1]: entrant dans le répertoire « /usr/src/kernels/2.6.32-220.13.1.el6.centos.plus.x86_64 »
    CC [M] /home/ahlem/bin/prgfile.o
    /home/ahlem/bin/prgfile.c:7:21: erreur: stdlib.h : Aucun fichier ou dossier de ce type
    /home/ahlem/bin/prgfile.c:8:19: erreur: stdio.h : Aucun fichier ou dossier de ce type
    /home/ahlem/bin/prgfile.c:9:27: erreur: sys/sendfile.h : Aucun fichier ou dossier de ce type
    /home/ahlem/bin/prgfile.c:15: attention : function declaration isn’t a prototype
    /home/ahlem/bin/prgfile.c: In function ‘main’:
    /home/ahlem/bin/prgfile.c:20: erreur: invalid storage class for function ‘nl_data_ready’
    /home/ahlem/bin/prgfile.c:34: erreur: invalid storage class for function ‘netlink_test’
    /home/ahlem/bin/prgfile.c:34: attention : function declaration isn’t a prototype
    /home/ahlem/bin/prgfile.c:41: erreur: ‘FILE’ undeclared (first use in this function)
    /home/ahlem/bin/prgfile.c:41: erreur: (Each undeclared identifier is reported only once
    /home/ahlem/bin/prgfile.c:41: erreur: for each function it appears in.)
    /home/ahlem/bin/prgfile.c:41: erreur: ‘fichier’ undeclared (first use in this function)
    /home/ahlem/bin/prgfile.c:43: erreur: implicit declaration of function ‘fopen’
    /home/ahlem/bin/prgfile.c:50: erreur: implicit declaration of function ‘fclose’
    /home/ahlem/bin/prgfile.c: In function ‘__inittest’:
    /home/ahlem/bin/prgfile.c:56: erreur: ‘my_module_init’ undeclared (first use in this function)
    /home/ahlem/bin/prgfile.c: In function ‘__exittest’:
    /home/ahlem/bin/prgfile.c:57: erreur: ‘my_module_exit’ undeclared (first use in this function)
    make[2]: *** [/home/ahlem/bin/prgfile.o] Erreur 1
    make[1]: *** [_module_/home/ahlem/bin] Erreur 2
    make[1]: quittant le répertoire « /usr/src/kernels/2.6.32-220.13.1.el6.centos.plus.x86_64 »
    make: *** [all] Erreur 2

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    La première chose est d'utiliser les balises CODE pour qu'on puisse lire ton code plus facilement.

    Déclarer des fonctions statiques à l'intérieur du main ne me semble pas judicieux, pourquoi ne pas les déclarer normalement? (et tu ne déclare pas les prototypes de tes fonctions)

    Le fait que le compilateur ne trouve pas stdlib.h et stdio.h est un peu bizarre... S'il ne trouve pas ces fichiers, ce n'est pas étonnant que ton code ne fonctionne pas.


    Sans les balises code et en mettant des fonctions dedans, c'est assez difficile de lire ton code.

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    # include <linux/sched.h>
    # include <linux/netlink.h>
    # include <net/sock.h>
    # include <stdlib.h>
    #include <stdio.h>
    #include <sys/sendfile.h> 
    # include <net/net_namespace.h>
    # define NETLINK_NITRO 17
     
    MODULE_LICENSE("GPL");
    int main ()
    {
     
    static struct sock *nl_sk = NULL;
     
    static void nl_data_ready (struct sk_buff *skb)
    {
     
       struct nlmsghdr *nlh = NULL;
       if(skb == NULL) {
       printk("skb is NULL \n");
       return ;
       }
       nlh = (struct nlmsghdr *)skb->data;
       printk(KERN_INFO "%s: received netlink message payload: %s\n", __FUNCTION__,
                  (char *) NLMSG_DATA(nlh));
     
    }
     
    static void netlink_test()
    {
     
    nl_sk = netlink_kernel_create(&init_net,NETLINK_NITRO,0, nl_data_ready,NULL, THIS_MODULE);
     
    }
    ssize_t sendfile(int fichier , int sock_fd , off_t * offset, size_t count);
    {
     FILE* fichier = NULL;
     
        fichier = fopen("/home/ahlem/GPL.odt" , "r+");
     
        if (fichier != NULL)
        {
    return 0 ;// On lit et on écrit dans le fichier
        }
     
    fclose(fichier) ;
    }
     
    sock_release(nl_sk->sk_socket);
    }
     
    module_init(my_module_init);
    module_exit(my_module_exit);

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Pour mettre du code, tu peux cliquer sur l'image '#'

    Ou écrire : [codeX] ton_code [/code] (enlève juste de 'X' )

    ça serait beaucoup plus lisible donc plus facile pour nous de t'aider.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    # include <linux/sched.h>
    # include <linux/netlink.h>
    # include <net/sock.h>
    # include <stdlib.h>
    #include <stdio.h>
    #include <sys/sendfile.h> 
    # include <net/net_namespace.h>
    # define NETLINK_NITRO 17
     
    MODULE_LICENSE("GPL");
    int main ()
    {
     
    static struct sock *nl_sk = NULL;
     
    static void nl_data_ready (struct sk_buff *skb)
    {
     
       struct nlmsghdr *nlh = NULL;
       if(skb == NULL) {
       printk("skb is NULL \n");
       return ;
       }
       nlh = (struct nlmsghdr *)skb->data;
       printk(KERN_INFO "%s: received netlink message payload: %s\n", __FUNCTION__,
                  (char *) NLMSG_DATA(nlh));
     
    }
     
    static void netlink_test()
    {
     
    nl_sk = netlink_kernel_create(&init_net,NETLINK_NITRO,0, nl_data_ready,NULL, THIS_MODULE);
     
    }
    ssize_t sendfile(int fichier , int sock_fd , off_t * offset, size_t count);
    {
     FILE* fichier = NULL;
     
        fichier = fopen("/home/ahlem/GPL.odt" , "r+");
     
        if (fichier != NULL)
        {
    return 0 ;// On lit et on écrit dans le fichier
        }
     
    fclose(fichier) ;
    }
     
    sock_release(nl_sk->sk_socket);
    }
     
    module_init(my_module_init);
    module_exit(my_module_exit);

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/03/2014, 21h09
  2. Réponses: 9
    Dernier message: 19/03/2008, 08h37
  3. Probleme envoi/reception de fichiers par RS232
    Par zezitinho dans le forum C++
    Réponses: 2
    Dernier message: 10/10/2007, 10h34
  4. Comment coder un fichier par programmation ?
    Par DJERDJAR YACINE dans le forum Débuter
    Réponses: 3
    Dernier message: 19/08/2007, 10h06
  5. Réponses: 9
    Dernier message: 19/08/2004, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo