Rechercher : dans
Par :

[C++] fonction open

Dernière réponse le 5 fév 2008 à 11:43:37 wsl1912, le 1 fév 2008 à 10:47:01 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un petit problème avec ses lignes de code:

int fd;

if((fd=open(source,O_WRONLY))<0)
{
        printf("ERREUR");
        exit(1);
}



lorsque je compile ça sous Linux Mandriva 2008 avec g++, il met le message d'erreur:

erreur: 'open' was not declared in this scope
erreur: 'O_WRONLY' was not declared in this scope


J'ai pensé alors que j'avais alors oublié une librairies seulement, j'ai bien mis:
stdio.h , iostream, unistd.h, stdlib.h

Je ne comprend pas pourquoi cela ne marche pas ... Pouvrez-vous m'aider svp ?

Merci d'avance
Seules les forces obscures peuvent ouvrir et fermer les portes de Silent Hill
Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « [C++] fonction open » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Liste simplement chaînée VoirLISTES SIMPLEMENT CHAINÉES Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la liste IV. Opérations sur les listes chaînées A. Initialisation B. Insertion d'un élément dans la liste 1. Insertion...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

dubcek, le 1 fév 2008 à 10:53:35

Ce ne sont pas des librairies, as-tu mis #include <stdio.h> au début?

Répondre à dubcek

2

wsl1912, le 1 fév 2008 à 11:22:34

En effet, ce sont des fichiers entêtes (abus de langage) désolé. J'ai bien mis stdio.h.

Ce qui est bizarre, c'est que fopen fonctionne mais pas open....
Seules les forces obscures peuvent ouvrir et fermer les port­es de Silent Hill

Répondre à wsl1912

3

wsl1912, le 1 fév 2008 à 12:09:22

J'ai finalement décidé d'utiliser fopen. Le seul petit problème est qu'il crée un fichier texte en binaire (même avec le mode O_TEXT). Du coup, un message d'erreur apparait à l'ouverture du fichier avec un éditeur de texte et des caractères parasites apparaît...

Si quelqu'un à une solution...

Merci d'avance.
Seules les forces obscures peuvent ouvrir et fermer les port­es de Silent Hill

Répondre à wsl1912

4

dubcek, le 1 fév 2008 à 13:21:32

Ca dépend de ce que tu écris dedans, quel format utilises tu ?
fprintf ? write ?

Répondre à dubcek

5

wsl1912, le 1 fév 2008 à 13:46:01

J'utilise fprint ensuite...
Seules les forces obscures peuvent ouvrir et fermer les port­es de Silent Hill

Répondre à wsl1912

6

dubcek, le 1 fév 2008 à 14:26:40

Quel format %f, %s ?

Répondre à dubcek

7

wsl1912, le 1 fév 2008 à 14:38:16

%d, %s et %c
Seules les forces obscures peuvent ouvrir et fermer les port­es de Silent Hill

Répondre à wsl1912

8

dubcek, le 1 fév 2008 à 16:03:12

Et si tu affichais un peu plus que 2 caractères à la fois ? :-)

Répondre à dubcek

9

wsl1912, le 1 fév 2008 à 16:35:53

Voici ma fonction en entier:

int Image::save_info(char* chemin_fichier)
{
      FILE* test;
      if((test=fopen(chemin_fichier,"w|O_TEXT"))==NULL)
      {
            return 0;
      }

      fprintf(test,"\n\n******INFORMATION ENTETE FICHIER******\n\n");
      fprintf(test,"Signature: %s\n",signature);
      fprintf(test,"Taille du fichier: %lld octets\n",taille_fichier);
      fprintf(test,"Champ réservé: 0x%c %c\n\n",champ_reserve[0],champ_reserve[1]);
      fprintf(test,"Offset: 0x%c %c\n\n",offset[0],offset[1]);
      fprintf(test,"******INFORMATION ENTETE IMAGE******\n\n");
      fprintf(test,"Taille de l'entête: %s\n",taille_entete);
      fprintf(test,"Largeur: %d pixels\n",largeur);
      fprintf(test,"Hauteur: %d pixels\n",hauteur);
      fprintf(test,"Nombre de plan: %d\n",nb_plan);
      fprintf(test,"Codage de couleurs: %d bits\n",codage_couleur);
      fprintf(test,"Methode de compression: %s\n",methode_compression);
      fprintf(test,"Taille de l'image: %d octets\n",taille_image);
      fprintf(test,"Résolution horizontale: %d pixels/mètres\n",reso_hor);
      fprintf(test,"Résolution verticale: %d pixels/mètres\n",reso_ver);
      fprintf(test,"Nombre de couleurs dans la palette: %d\n",cou_pal);
      fprintf(test,"Nombre de couleurs importantes dans la palette: %d\n",cou_pali);

      fclose(test);
     return 1;
}

Seules les forces obscures peuvent ouvrir et fermer les portes de Silent Hill

Répondre à wsl1912

10

Char Snipeur, le 1 fév 2008 à 16:41:10

Man open donne : ( http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/­open.2.html )
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>
à inclure.
Quand le compilateur ne trouve pas une fonction et ne comprend pas les macro, 99 fois sur 100, c'est que tu n'as pas inclu le bon en tête.
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

11

dubcek, le 3 fév 2008 à 10:10:05

Ca ne serait pas plutôt : fopen(chemin_fichier,"w+t")

Répondre à dubcek

12

wsl1912, le 4 fév 2008 à 08:30:45

Merci Char Snipeur... je vais rajouter les librairies. Elles n'étaient pas indiqué en utilisant man sur mon pc.

dubcek: je ne sais pas, l'aide de mon compilateur m'indique que je peux utiliser "w|O_TEXT", mon compilateur ne m'indique pas d'erreur. Ceci dit, je vais essayé ta manip.

Seules les forces obscures peuvent ouvrir et fermer les portes de Silent Hill

Répondre à wsl1912

13

dubcek, le 4 fév 2008 à 09:53:45

Parce qu'entre ", c'est un string et le compilateur n'a pas de raison de générer une erreur.
C'est |O_TEXT avec open, +t entre " avec fopen

Répondre à dubcek

14

wsl1912, le 4 fév 2008 à 10:31:09

Aucun changement, toujours des caractères parasites, ce qui est étrange, c'est qu'il ne le fait que lorsque j'affiche des variables caractères %c cependant il affiche correctement les variables %s...
Seules les forces obscures peuvent ouvrir et fermer les port­es de Silent Hill

Répondre à wsl1912

15

wsl1912, le 4 fév 2008 à 12:05:55

Ok, ça fonctionne cette fois.

Les caractères parasites étaient dû à l'absence du caractère '\0' à la fin des chaînes de caractères. Cela provoquait aussi un message d'erreur lors de l'ouverture ultérieure du fichier.

Mon programme permet de lire les informations contenues dans un fichier bitmap, de les afficher ainsi que les enregistrer dans un fichier texte dont le chemin est entré en paramètre.
Ce chemin est par exemple "../../arrow.bmp", (le chemin peut être soit absolu, soit relatif). J'aimerai que le fichier texte où j'enregistre mes infos s'appellent nom_bitmap.txt (exemple ici: arrow.txt pour le fichier arrow.bmp).
Il faut donc que j'extrait le nom du fichier bitmap en enlevant son chemin ainsi que son extention (../../arrow.bmp -> arrow)

Comment puis-je le faire svp ?

merci d'avance
Seules les forces obscures peuvent ouvrir et fermer les portes de Silent Hill

Répondre à wsl1912

16

dubcek, le 4 fév 2008 à 14:37:41

En utilisant basename :
char nom[128], *pnom ;
nom=basename("../../arrow.bmp");
pnom=index(nom,"."); *pnom='\0' ;

Répondre à dubcek

17

Char Snipeur, le 4 fév 2008 à 14:37:51

Si tu as ton ../../arrow.bmp dans uns chane de caratère, il suffit d'enlever tout ce qui a un rapport avec le chemin relatif et l'extension.
Tu commence par parcourir ta chaine par la droite, des que tu rencontre le '.' tu sauvegarde les caractères dans une autre chaine, puis tu arrete de parcourir des que tu rencontre un caractère qui n'est pas une alphanumérique.
Ensuite, il n'y a plus qu'a inverser la chaine sauvegarde
Salutation ! Quand on sait pas, on touche pas !JBT
Char Snipeur

Répondre à Char Snipeur

18

 wsl1912, le 5 fév 2008 à 11:43:37

Merci, ça fonctionne parfaitement.

Pourquoi quand je lis des octets dans un fichier bitmap, en se positionnant avec

 fseek 
puis en lisant l'octet avec
 fgetc 
j'optiens en hexa ffffffc0 au lieu de c0 sachant que je stock cette données dans une case d'un tableau de caractère (donc un octet par case) pourtant il ne me met pas d'erreur....

J'ai l'impression que le
 printf 
me rajoute les 'f' devant ma données, pourquoi et comment l'en empêché ?

Merci d'avance
Seules les forces obscures peuvent ouvrir et fermer les port­es de Silent Hill

Répondre à wsl1912
Collection CommentÇaMarche.net