Forum Programmation.c ecriture sur peripherique

Posté par  .
Étiquettes : aucune
0
24
oct.
2006
bonjour,

j'essai d'ecrire sur un ecran LCD avec un driver de type char.

voici les 3 lignes :

int fd;
fd=open("dev/misc/lcd",O_CREAT,S_IRWXO);
write(fd,"tst",strlen("tst));


la fonction write renvoie l'erreur (Mauvais descripteur de fichier).
Avez vous une solution ?

merci
  • # Alors, en vrac :

    Posté par  . Évalué à 5.

    - Il manque un slash avant "dev"
    - O_CREAT ne s'applique pas ici
    - tu ne vérifies pas la validité de ton descripteur fd (en gros, tu ne vérifies pas si ton fichier a bien été ouvert).
    - Tu n'as probablement pas les droits d'accès sur /dev/misc/lcd

    En plus, les droits d'accès spécifiés ne s'appliquent qu'aux "autres". Essaie déja de faire " echo -n "tst" > /dev/misc/lcd " depuis la ligne de commande pour voir si tu parviens à tes fins.
  • # manque un truc non ?

    Posté par  . Évalué à 2.

    >fd=open("dev/misc/lcd",O_CREAT,S_IRWXO);

    fd=open("/dev/misc/lcd",O_CREAT,S_IRWXO);

    Ensuite pourquoi ouvrir en execution un driver ?
  • # re

    Posté par  . Évalué à 1.

    As tu testé le retour de la fonction open() ?
    Tu dis que write t'envoie bouler, mais il est probable que cela vienne d'un echec de l'ouverture.


    if ( (fd=open("dev/misc/lcd",O_CREAT,S_IRWXO)) < 0 )
    perror("open()");


    De plus, tes flags ne sont pas bons pour le open().
    En effet, on en crée pas un fichier de périphérique comme un simple fichier (man 2 mknod), donc il faut virer ton O_CREAT.
  • # resolu

    Posté par  . Évalué à 1.

    merci a tous en faite l'erreur vient de la fonction open au niveau du flag :
    il fallait a ecrire
    fd=open("/dev/misc/lcd",O_RDWR | O_CREAT,S_IRWXO);

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.