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 :

Ecrire sur la sortie standard avec write


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 61
    Points : 30
    Points
    30
    Par défaut Ecrire sur la sortie standard avec write
    Bonjour, voilà j'ai un petit soucis pour écrire sur la sortie standard avec write, voici le code:
    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
    /* exo_1_1 .c Exercice 1.1 */
     
    # include <unistd.h>
    # include <errno.h>
    # include <stdio.h>
    # include <stdlib.h>
     
     
    int main ()
    {
       int w;
     
       /* faire l’affichage avec write (2) ici */
     
       w = write(STDOUT_FILENO,"Salut!\n",10); 
       / * On fait un peu de controle d’erreur , si le retour de write (2) est
        * negatif , on affiche le message d’erreur a l’aide de perror (3).
        */
       if (w < 0)
          perror (" Erreur lors de l’ecriture : ");
       return (0);
    }
    je test si ça c'est bien passé mais ça me renvoie Erreur lors de l'écriture. Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    D'ici, je ne vois pas trop ce qui pose problème, à part le fait que ta chaîne ne fasse que 7 caractères (en excluant le \0 final).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 61
    Points : 30
    Points
    30
    Par défaut
    Comment je peux faire la même chose en utilisant buf?

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par overlolo Voir le message
    Bonjour, voilà j'ai un petit soucis pour écrire sur la sortie standard avec write, voici le code:
    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
    /* exo_1_1 .c Exercice 1.1 */
     
    # include <unistd.h>
    # include <errno.h>
    # include <stdio.h>
    # include <stdlib.h>
     
     
    int main ()
    {
       int w;
     
       /* faire l’affichage avec write (2) ici */
     
       w = write(STDOUT_FILENO,"Salut!\n",10); 
       / * On fait un peu de controle d’erreur , si le retour de write (2) est
        * negatif , on affiche le message d’erreur a l’aide de perror (3).
        */
       if (w < 0)
          perror (" Erreur lors de l’ecriture : ");
       return (0);
    }
    je test si ça c'est bien passé mais ça me renvoie Erreur lors de l'écriture. Merci pour votre aide
    write() n'est pas du C standard. Tu es sous quel système ?

    (Attention, c'est '/*' et non '/ *' )

    La valeur 10 n'a aucun sens et provoque un comportement indéterminé.

    Sous Windows :

    Résultat avec Code::Block:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Salut!
      E
    Process returned 0 (0x0)   execution time : 0.074 s
    Press any key to continue.
    Avec Visual C++, je pense que ça ne compile pas du tout...

    Le code correct est :
    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
     
    /* exo_1_1 .c Exercice 1.1 */
     
    #include <unistd.h>
    #include <errno.h>
    #include <stdio.h>
    #include <string.h>
     
    int main (void)
    {
       /* faire l’affichage avec write (2) ici */
       char const *s = "Salut!\n";
       int w = write (STDOUT_FILENO, s, strlen (s));
       /* On fait un peu de controle d’erreur , si le retour de write (2) est
        * negatif , on affiche le message d’erreur a l’aide de perror (3).
        */
       if (w < 0)
          perror (" Erreur lors de l’ecriture : ");
       return (0);
    }
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Salut!
     
    Process returned 0 (0x0)   execution time : 0.008 s
    Press any key to continue.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    A note que pour etre totalement correcte il faudrait ecrire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int w = write (STDOUT_FILENO, s, strlen(s) * sizeof(*s));
    pour des char aucun probleme la taille est 1 mais si tu veux ecrire genre un tableau de int dans un fichier ou une structure enfin bref, faut faire comme ca

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par daedric Voir le message
    A note que pour etre totalement correcte il faudrait ecrire:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int w = write (STDOUT_FILENO, s, strlen(s) * sizeof(*s));
    pour des char aucun probleme la taille est 1 mais si tu veux ecrire genre un tableau de int dans un fichier ou une structure enfin bref, faut faire comme ca
    Inutile : strlen() impose le type char.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Points : 250
    Points
    250
    Par défaut
    Ce que je voulais dire par la c'est que si il veut ecrire autre chose qu'une chaine de caractere il devra penser a prendre en compte ce genre de chose

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par daedric Voir le message
    Ce que je voulais dire par la c'est que si il veut ecrire autre chose qu'une chaine de caractere il devra penser a prendre en compte ce genre de chose
    C'est à voir au cas par cas...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Février 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    voici un code que j'ai testé sous Linux.

    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
     
    /* exo_1_1 .c Exercice 1.1 */
     
    # include <unistd.h>
    # include <errno.h>
    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h>
     
     
    int main ()
    {
       int w;
       char *msg = "Salut!\n";
     
       /* faire l’affichage avec write (2) ici */
     
       w = write(STDOUT_FILENO, msg, strlen(msg));
     
       /* 
        * On fait un peu de controle d’erreur , si le retour de write (2) est
        * negatif , on affiche le message d’erreur a l’aide de perror (3).
        */
     
       if (w < 0)
          perror (" Erreur lors de l’ecriture : ");
       return (0);
    }
    si tu a un problème avec la fonction write() sous Linux, utilise la commande:
    man 2 write
    sous un terminal.

Discussions similaires

  1. Comment ecrire sur la meme ligne avec la commane ECHO
    Par juflata dans le forum Windows
    Réponses: 3
    Dernier message: 24/11/2015, 09h06
  2. [Lazarus] Ecrire sur la sortie standard stdout
    Par SergioMaster dans le forum Lazarus
    Réponses: 4
    Dernier message: 27/09/2009, 14h00
  3. Réponses: 5
    Dernier message: 09/02/2009, 13h27
  4. Ecrire sur la sortie standard
    Par red210 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/04/2008, 11h27
  5. PB sortie standard avec les PTHREAD !!!
    Par djspit dans le forum C++
    Réponses: 15
    Dernier message: 19/11/2004, 01h17

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