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 :

A quoi sert les class en c ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Par défaut A quoi sert les class en c ?
    Bonjour je suis dans la programation de module , mais je ne comprend pas pourquoi et ce qu'est une class en c , je trouve sur google des info sur les class mais en c++ .
    Moi je me demande a quoi sert la class en c merci de vos futur reponse .

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par risk69 Voir le message
    je trouve sur google des info sur les class mais en c++ .
    Peut-être parce que les class n'existent qu'en C++...

    Citation Envoyé par risk69 Voir le message
    Moi je me demande a quoi sert la class en c
    Si ça existait ça aurait probablement le même rôle qu'en C++, à savoir définir un objet, mais voilà, ça n'existe pas (peut-être parce que le C n'est pas un langage objet) donc ça ne peut pas servir à grand chose.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Par défaut Oui mais ...
    regarde bien le code on y utilise une class alors que c'est en c
    ===>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        cls = class_create(THIS_MODULE, DEVICE_NAME); 
        device_create(cls, NULL, MKDEV(major, 0), NULL, DEVICE_NAME);
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
     
    /* 
     
     * chardev.c: Creates a read-only char device that says how many times 
     
     * you have read from the dev file 
     
     */ 
     
     
     
    #include <linux/cdev.h> 
     
    #include <linux/delay.h> 
     
    #include <linux/device.h> 
     
    #include <linux/fs.h> 
     
    #include <linux/init.h> 
     
    #include <linux/irq.h> 
     
    #include <linux/kernel.h> 
     
    #include <linux/module.h> 
     
    #include <linux/poll.h> 
     
     
     
    /*  Prototypes - this would normally go in a .h file */ 
     
    static int device_open(struct inode *, struct file *); 
     
    static int device_release(struct inode *, struct file *); 
     
    static ssize_t device_read(struct file *, char __user *, size_t, loff_t *); 
     
    static ssize_t device_write(struct file *, const char __user *, size_t, 
     
                                loff_t *); 
     
     
     
    #define SUCCESS 0 
     
    #define DEVICE_NAME "chardev" /* Dev name as it appears in /proc/devices   */ 
     
    #define BUF_LEN 80 /* Max length of the message from the device */ 
     
     
     
    /* Global variables are declared as static, so are global within the file. */ 
     
     
     
    static int major; /* major number assigned to our device driver */ 
     
     
     
    enum { 
     
        CDEV_NOT_USED = 0, 
     
        CDEV_EXCLUSIVE_OPEN = 1, 
     
    }; 
     
     
     
    /* Is device open? Used to prevent multiple access to device */ 
     
    static atomic_t already_open = ATOMIC_INIT(CDEV_NOT_USED); 
     
     
     
    static char msg[BUF_LEN]; /* The msg the device will give when asked */ 
     
     
     
    static struct class *cls; 
     
     
     
    static struct file_operations chardev_fops = { 
     
        .read = device_read, 
     
        .write = device_write, 
     
        .open = device_open, 
     
        .release = device_release, 
     
    }; 
     
     
     
    static int __init chardev_init(void) 
     
    { 
     
        major = register_chrdev(0, DEVICE_NAME, &chardev_fops); 
     
     
     
        if (major < 0) { 
     
            pr_alert("Registering char device failed with %d\n", major); 
     
            return major; 
     
        } 
     
     
     
        pr_info("I was assigned major number %d.\n", major); 
     
     
     
        cls = class_create(THIS_MODULE, DEVICE_NAME); 
     
        device_create(cls, NULL, MKDEV(major, 0), NULL, DEVICE_NAME); 
     
     
     
        pr_info("Device created on /dev/%s\n", DEVICE_NAME); 
     
     
     
        return SUCCESS; 
     
    } 
     
     
     
    static void __exit chardev_exit(void) 
     
    { 
     
        device_destroy(cls, MKDEV(major, 0)); 
     
        class_destroy(cls); 
     
     
     
        /* Unregister the device */ 
     
        unregister_chrdev(major, DEVICE_NAME); 
     
    } 
     
     
     
    /* Methods */ 
     
     
     
    /* Called when a process tries to open the device file, like 
     
     * "sudo cat /dev/chardev" 
     
     */ 
     
    static int device_open(struct inode *inode, struct file *file) 
     
    { 
     
        static int counter = 0; 
     
     
     
        if (atomic_cmpxchg(&already_open, CDEV_NOT_USED, CDEV_EXCLUSIVE_OPEN)) 
     
            return -EBUSY; 
     
     
     
        sprintf(msg, "I already told you %d times Hello world!\n", counter++); 
     
        try_module_get(THIS_MODULE); 
     
     
     
        return SUCCESS; 
     
    } 
     
     
     
    /* Called when a process closes the device file. */ 
     
    static int device_release(struct inode *inode, struct file *file) 
     
    { 
     
        /* We're now ready for our next caller */ 
     
        atomic_set(&already_open, CDEV_NOT_USED); 
     
     
     
        /* Decrement the usage count, or else once you opened the file, you will 
     
         * never get rid of the module. 
     
         */ 
     
        module_put(THIS_MODULE); 
     
     
     
        return SUCCESS; 
     
    } 
     
     
     
    /* Called when a process, which already opened the dev file, attempts to 
     
     * read from it. 
     
     */ 
     
    static ssize_t device_read(struct file *filp, /* see include/linux/fs.h   */ 
     
                               char __user *buffer, /* buffer to fill with data */ 
     
                               size_t length, /* length of the buffer     */ 
     
                               loff_t *offset) 
     
    { 
     
        /* Number of bytes actually written to the buffer */ 
     
        int bytes_read = 0; 
     
        const char *msg_ptr = msg; 
     
     
     
        if (!*(msg_ptr + *offset)) { /* we are at the end of message */ 
     
            *offset = 0; /* reset the offset */ 
     
            return 0; /* signify end of file */ 
     
        } 
     
     
     
        msg_ptr += *offset; 
     
     
     
        /* Actually put the data into the buffer */ 
     
        while (length && *msg_ptr) { 
     
            /* The buffer is in the user data segment, not the kernel 
     
             * segment so "*" assignment won't work.  We have to use 
     
             * put_user which copies data from the kernel data segment to 
     
             * the user data segment. 
     
             */ 
     
            put_user(*(msg_ptr++), buffer++); 
     
            length--; 
     
            bytes_read++; 
     
        } 
     
     
     
        *offset += bytes_read; 
     
     
     
        /* Most read functions return the number of bytes put into the buffer. */ 
     
        return bytes_read; 
     
    } 
     
     
     
    /* Called when a process writes to dev file: echo "hi" > /dev/hello */ 
     
    static ssize_t device_write(struct file *filp, const char __user *buff, 
     
                                size_t len, loff_t *off) 
     
    { 
     
        pr_alert("Sorry, this operation is not supported.\n"); 
     
        return -EINVAL; 
     
    } 
     
     
     
    module_init(chardev_init); 
     
    module_exit(chardev_exit); 
     
     
     
    MODULE_LICENSE("GPL");

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 841
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par risk69 Voir le message
    regarde bien le code on y utilise une class alors que c'est en c
    Pas tout à fait. On utilise une structure à laquelle on a donné le nom littéral "class" (on aurait pu aussi bien l'appeler "toto"). Ce n'est pas tout à fait la même chose.
    De même que tu peux donner à tes variables des noms de ton choix, tu peux aussi donner à des structures des noms de ton choix.
    Les conventions veulent toutefois qu'on les fasse précéder de "s_" (et "t_" pour les types) pour justement les reconnaitre facilement à la lecture.

    Et c'est la même chose pour les fonctions qui se nomment "class_truc" pour montrer qu'elles vont travailler sur la structure "class" mais où ces noms ne sont rien d'autre que des noms de fonctions.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Janvier 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 13
    Par défaut Ah okay
    merci beaucoup j'avais pas compris tous sa

  6. #6
    Membre chevronné
    Homme Profil pro
    très occupé
    Inscrit en
    Juillet 2014
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : très occupé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 137
    Par défaut
    Effectivement, ce n'est pas un concept du langage C.

    La raison particulière pour laquelle le terme "class" est utilisé dans ton code est liée au fait que ce code semble tiré d'un exemple de source de développement d'un module pour le noyaux Linux.

    Le noyau Linux expose des interfaces permettant de développement de modules. Dans ce contexte, le terme "class" se rapporte à une classe de matériel, c'est à dire un type de matériel pour lequel un module peut être réalisé.

    Tu peux voir les classes de matériels utilisées par ton noyau dans /sys/class/ par exemple chez moi en voilà un extrait :

    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
    # ls -al /sys/class/
    total 0
    drwxr-xr-x 56 root root 0 sept.  8 23:51 .
    dr-xr-xr-x 13 root root 0 sept.  8 23:51 ..
    drwxr-xr-x  2 root root 0 sept.  8 23:51 backlight
    drwxr-xr-x  2 root root 0 sept.  8 23:51 bdi
    drwxr-xr-x  2 root root 0 sept.  8 23:51 block
    drwxr-xr-x  2 root root 0 sept.  8 23:51 bluetooth
    drwxr-xr-x  2 root root 0 sept.  8 23:51 bsg
    drwxr-xr-x  2 root root 0 sept.  8 23:51 devcoredump
    drwxr-xr-x  2 root root 0 sept.  8 23:51 devfreq
    drwxr-xr-x  2 root root 0 sept.  8 23:51 dma
    drwxr-xr-x  2 root root 0 sept.  8 23:51 dmi
    drwxr-xr-x  2 root root 0 sept.  8 23:51 drm
    drwxr-xr-x  2 root root 0 sept.  8 23:51 drm_dp_aux_dev
    drwxr-xr-x  2 root root 0 sept.  8 23:51 firmware
    drwxr-xr-x  2 root root 0 sept.  8 23:51 gpio
    drwxr-xr-x  2 root root 0 sept.  8 23:51 graphics
    drwxr-xr-x  2 root root 0 sept.  8 23:51 hidraw
    (...)
    Tu peux créer ta propre "class"(e) avec class_create()

    L'URL suivante https://github.com/torvalds/linux/bl...device/class.h

    contient la définition de la struct class et décrit aussi ce qu'est une "class"(e) dans ce contexte dans la doc kerneldoc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     * A class is a higher-level view of a device that abstracts out low-level
     * implementation details. Drivers may see a SCSI disk or an ATA disk, but,
     * at the class level, they are all simply disks. Classes allow user space
     * to work with devices based on what they do, rather than how they are
     * connected or how they work.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. a quoi sert les accolades dans Class[] types = {Integer.TYPE};
    Par harf18 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/04/2010, 10h08
  2. A quoi sert les managed bean ?
    Par soony dans le forum JSF
    Réponses: 2
    Dernier message: 31/08/2009, 12h26
  3. A quoi sert les procédures stockées ?
    Par JediMaster dans le forum Linq
    Réponses: 4
    Dernier message: 18/05/2009, 21h14
  4. A quoi sert les " ! " en php
    Par biker63 dans le forum Langage
    Réponses: 7
    Dernier message: 16/04/2007, 17h49
  5. Réponses: 8
    Dernier message: 15/02/2007, 13h24

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