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 :

probleme avec la fonction write


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut probleme avec la fonction write
    Bonjour à tous,
    le probleme est simple à comprendre, je veux écrire dans un fichier et la fonction write me retourne -1. Mais si je remplace dans la fonction open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int fd = open("coco.txt", O_CREAT|O_APPEND, 0600);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int fd = open("coco.txt", O_CREAT|O_WRONLY, 0600);
    ca marche.

    Je vous montre mon 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
     
    int main(int argc, char const *argv[])
    {	
    	int fd = open("coco.txt", O_CREAT|O_APPEND, 0600);
    	if( fd < 0)
    	{
    		printf("erreur avec open, fd = %i\n", fd);
    	}
    	else
    	{
    		char* str = "coucou mon petit coco\n";
    		int err = write(fd, str, 22);
    		printf("err = %i\n", err);
    		close(fd);
    	}
    	return 0;
    }
    je bloque totalement sur le pourquoi du comment. Avez vous une idée du probleme ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 551
    Points
    1 551
    Par défaut
    Hello,

    Le man de open() spécifie bien que

    Citation Envoyé par man open()
    The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR. These request opening the file read-only, write-only, or read/write, respectively.
    Dans ton premier open, aucun de ces trois flags n'est spécifié. L'open ne se fait donc pas.
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut
    j'ai ajouté O_CREAT|O_APPEND|O_WRONLY et ça marche, néanmoins le open me retournait avec O_CREAT|O_APPEND la valeur 3 donc ça marchait et l'erreur se déclenchait sur write, étrange.


    une dernière question, si je met dans la fonction write : write(10, "coucou", 6) la valeur 10 que j'ai choisi au pif, est ce que ça peut être dangereux pour le système car je vais écrire sur un fichier dont le fichier descripteur vaux 10 et ça peut être un fichier très important que je modifie?

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 564
    Points : 7 640
    Points
    7 640
    Par défaut
    Citation Envoyé par cosmoff Voir le message
    j'ai ajouté O_CREAT|O_APPEND|O_WRONLY et ça marche, néanmoins le open me retournait avec O_CREAT|O_APPEND la valeur 3 donc ça marchait et l'erreur se déclenchait sur write, étrange.
    Pas tant ça tu ne demandes pas d'accès en écriture, le problème apparaît au moment de l'écriture. Tu as créé un fichier sur lequel tu ne souhaites ni lire ni écrire.
    Citation Envoyé par cosmoff Voir le message
    une dernière question, si je met dans la fonction write : write(10, "coucou", 6) la valeur 10 que j'ai choisi au pif, est ce que ça peut être dangereux pour le système car je vais écrire sur un fichier dont le fichier descripteur vaux 10 et ça peut être un fichier très important que je modifie?
    Si tu utilises un handle fichier qui n'a pas été ouvert, il n'a aucune raison d'écrire dans un quelconque fichier. Tu auras l'erreur EBADF. Mais attention les numéros 1 et 2 existent et n'on pas besoin d'être ouverts.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut
    ok c'est plus clair, merci beaucoup

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

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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