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

Bibliothèque standard C Discussion :

fopen() et accès matériel


Sujet :

Bibliothèque standard C

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut fopen() et accès matériel
    Bonjour,

    J'ai un petit souci concernant l'implémentation de fopen() sous windows.
    En réalité, le problème vient peut être du "côté" dont je me trouve (peu parlant pour l'instant hein ? )

    Bref, pour faire simple, est-il possible "d'ouvrir" une carte réseau de la même manière qu'un port COM, un disque ou une partition, via la syntaxe définis par windows à savoir "\\.\<name>" ?

    J'ai trouvé des infos pour le nommage des disques ("PHYSICALDRIVEx") des COM ("COMx") et autres LPT mais je ne trouve rien concernant les cartes réseaux (même une syntaxe fournit par winobj ne m'aide pas !).

    Concernant le "coté" je me pose la question de savoir si je peux attaquer la carte coté "utilisateur" ou si je dois le faire coté "driver"...

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Si tu veux faire ce genre de choses côté utilisateur, déjà il te faudra un truc de plus bas niveau que fopen() : Il te faudra utiliser CreateFile() pour avoir accès à l'API DeviceIoControl().

    Ensuite, il faut que le driver de la carte expose des codes de contrôle à utiliser côté utilisateur. Si le driver n'expose rien directement (exemple: si les fonctions réseau de Windows l'utilisent directement en mode kernel), eh bien tu ne pourras pas faire ce que tu veux sans réécrire un driver...

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut
    hmm je comprends pas très bien ce que tu veux dire par "code de contrôle", pourrais-tu être plus explicite ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Jette un coup d'œil à la fonction DeviceIoControl() : C'est la fonction bas-niveau que le code utilisateur utilise pour communiquer avec un driver.

    Elle prend en paramètres un handle vers le périphérique (associé à UN driver), un code de contrôle, un buffer d'entrée et un buffer de sortie.

    Typiquement, dans le code du driver, il y a un gros switch() sur ce code de contrôle.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut
    oki.

    Par ailleurs le fait que la carte ait d'activé le protocole IP suppose t-il qu'une donnée envoyé par une appli a la carte via DeviceIoControl() va etre obligatoirement encapsulé d'un entete IP ? ou cela doit-il etre spécifié lors de l'appel de la fonction ?

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Ouvrir la carte réseau n'est pas la même chose qu'ouvrir un socket. La façon dont la carte traite ce qu'on lui envoie dépend uniquement du driver, et du bon vouloir de celui qui l'a écrit.

    Et comme je l'ai dit, il n'est, à ma connaissance, même pas garanti que le driver soit accessible via DeviceIoControl()...

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2004
    Messages : 77
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ouvrir la carte réseau n'est pas la même chose qu'ouvrir un socket. La façon dont la carte traite ce qu'on lui envoie dépend uniquement du driver, et du bon vouloir de celui qui l'a écrit.

    Et comme je l'ai dit, il n'est, à ma connaissance, même pas garanti que le driver soit accessible via DeviceIoControl()...
    oé mais justement, est-ce qu'elle prend la liberté de mettre en forme des données en vue de l'utiliser sur un socket où est-ce qu'elle les traites directements en encapsulant dans sa couche liaisons...

    Bon en tout cas merci, je vais me renseigner là dessus

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Ben tu ne peux pas savoir, comme je dis ça dépend du driver...
    C'est le driver qui choisit, pas la carte ou l'utilisateur.

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 410
    Points : 23 809
    Points
    23 809
    Par défaut
    Citation Envoyé par oLie93 Voir le message
    Par ailleurs le fait que la carte ait d'activé le protocole IP suppose t-il qu'une donnée envoyé par une appli a la carte via DeviceIoControl() va etre obligatoirement encapsulé d'un entete IP ? ou cela doit-il etre spécifié lors de l'appel de la fonction ?
    Pour faire « simple » :

    - fopen() ou autre fonction assimilée ouvrent un canal en lecture et/ou en écriture. C'est donc utilisable sur un port série, et même sur une connexion TCP, ce qui se fait par l'intermédiaire des sockets.

    - Contrairement à une connexion série RS/232 qui est une liaison point-à-point (canal privé bidirectionel entre exactement deux homologues, comme lors d'un appel téléphonique, par exemple), une carte réseau partage le même câble que toutes les machines du LAN, même si ce n'est plus aussi évident depuis que Ethernet est en RJ45. Ça fonctionne plutôt comme une radio CB : même médium pour émettre et recevoir, et chacun entend les messages de tout le monde. Il revient à chaque participant de faire le tri. En ce sens, c'est inapplicable à la gestion de fichier.

    - Ce n'est pas la carte elle-même qui va encapsuler tes données dans un paquet TCP/IP. C'est purement logiciel et ta carte peut envoyer virtuellement n'importe quoi. À dire vrai, on a mis assez longtemps à obtenir l'IP sous Windows. Jusqu'à W3.11, on utilisait Trumpet Winsock pour obtenir la couche sous-jacente et Netscape Navigator pour pouvoir enfin surfer sur le web. Tous les jeux DOS utilisaient IPX, utilisés dans les alors très répandus réseaux Novell.

    - Les sockets ne sont qu'une API. Une fois que l'on a écrit dedans, c'est cette API qui se charge d'appeler le gestionnaire de protocole pour mettre tes données en forme et une fois que c'est fait, c'est en fonction du routage décidé au vu des tables du protocole utilisé que va être choisi le matériel à exploiter : ça peut rester local (127.0.0.1), partir vers le port série pour être envoyé au modem (cas d'un liaison PPP vers un FAI, par exemple), ou encore vers une carte réseau.

    - Dans l'absolu, une carte réseau, c'est quand même un canal TX et un canal RX, donc ça pourrait être utilisé comme un super-port série. Ça se fait notamment dans les clusters où les machines reliées sont toujours les mêmes et où le débit maximum importe. Donc, c'est possible mais c'est pas automatique et cela va dépendre principalement du pilote de ta carte

Discussions similaires

  1. Mécanisme d'accès au matériel embarqué
    Par adilou1981 dans le forum Flex
    Réponses: 15
    Dernier message: 03/06/2009, 18h33
  2. [PHP 5.2] Problème d'accès distant avec fopen et fgets
    Par DanLM dans le forum Langage
    Réponses: 1
    Dernier message: 17/03/2009, 14h12
  3. Accès matériel linux
    Par pyknite dans le forum Linux
    Réponses: 2
    Dernier message: 09/03/2009, 11h11
  4. fopen et fsockopen : acces denied
    Par temperature dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2008, 13h09
  5. chemin d'acces fopen
    Par hedi07 dans le forum Langage
    Réponses: 2
    Dernier message: 20/05/2007, 20h36

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