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 :

Redirection du flux vers la mémoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 34
    Par défaut Redirection du flux vers la mémoire
    Bonjour,

    je voudrais savoir s'il est possible de rediriger les sorties vers une zone de mémoire ( une chaine ).

    J'ai utilisé cette portion de code pour rediriger vers un fichier. Comment la modifier pour obtenir la redirection vers la mémoire ?

    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
    if (elems[z][0]=='>') {
    			/* XXX ouvre le fichier destination */
    			int file = open(&elems[z][1], O_WRONLY | O_CREAT | O_TRUNC, 0644);
    			if (file==-1) { 
    				printf("ne peut pas créer le fichier \"%s\" (%s)\n",
    					&elems[z][1],strerror(errno));
    				exit(1);
    			}
     
    			/* XXX redirige la sortie standard sur file */
    			close(1);
    			dup2(file,1);
     
    			/* XXX supprime le dernier argument */
    			elems[z] = NULL;
    		}
    PS : Je ne suis pas très calé en C, soyez patient, parlez-moi avec des mots compréhensibles par un individu normal ...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut
    Salut,

    Euh, si je comprends bien tu veux ouvrir un fichier et le mettre dans un chaine de caractère?
    Ca ressemble à du PHP ce que tu demandes, sauf que ca met ton fichier dans un tableau.

    Donc moi aussi ce que je peux te proposer c'est ouvrir un fichier puis le stocker dans un tableau de chaine de caratère. (char **)

    Je sais que tu me dis ne pas être très calé en C, mais comme ca, je vois pas trop comment faire autrement.

    Exemple, fichier.txt:
    Salut ça va?
    Oui ça va, et toi?
    Très bien merci!

    T'auras:
    tab[0] = "Salut ça va?"
    tab[1] = "Oui ça va, et toi?"
    tab[2] = "Très bien merci!"
    tab[3] = NULL

    Et après libre à toi de supprimer des elements, en rajouter etc...

    Ca roule?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 34
    Par défaut
    ... euh , je vais préciser le problème :

    j'ai écrit un programme que je voudrais utiliser sans trop de modifications soit depuis le terminal, soit depuis une interface utilisateur.

    Le programme comprend un certain nombre de fonctions affichant des résultats sous forme de printf" .... mon résultat ... ".

    Je peux rediriger ces affichages vers un fichier mais je voudrais rediriger ces affichages vers une chaine qui serait renvoyée vers l'interface utilisateur sans avoir réécrire tous les printf.

    Ex : (PS :mon programme est un correcteur orthographique)

    je voudrais pouvoir écrire dans le terminal :
    SEND un petit cha
    -> affichage du résultat dans le terminal

    ou dans l'interface utilisateur :
    put correcteur("SEND un petit cha") into field ....

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Pour cela, utilise les tubes (pipes).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 34
    Par défaut
    Oui, mais je ne veux pas récupérer le résultat d'une commande système mais le résultat d'une commande de mon programme ...

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par OrthoMaker Voir le message
    Oui, mais je ne veux pas récupérer le résultat d'une commande système mais le résultat d'une commande de mon programme ...
    C'est la même chose. Il ne s'agit pas, ici, d'utiliser le caractère « | » depuis le shell mais d'ouvrir un tube avec pipe() qui te renverra une paire de descripteurs de fichiers, l'un en lecture, l'autre en écriture, et dans lesquels tu pourras écrire comme dans un fichier ordinaire.

    Tu pourras même manipuler les descripteurs pour remplacer celui de la sortie standard par le tien, même en cours d'exécution. À ta charge, ensuite, de faire une extension à ton programme qui lise le tube et en fasse ce que tu veux.

    Par contre, pour revenir au shell, il est préférable de séparer les deux fonctions. Rediriger en interne la sortie standard, ce n'est déjà pas très propre, mais si c'est par flème de modifier ton programme, alors le mieux est de créer de programmes distincts : l'un chargé de faire ce que tu fais, et l'autre chargé de mettre dans une fenêtre ce qui vient de l'entrée standard. Tu lances ensuite les deux en les pipant avec « | ».

  7. #7
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Si tu veux rediriger la sortie standard d'un programme externe ("commande système"), tu utiliseras les tubes. Si tu veux juste que tes printf écrivent dans une mémoire au lieu d'écrire dans un fichier pourquoi ne pas seulement les remplacer par sprintf ? Si ce que tu cherches est une fonction qui fait qu'après son appel tous les printf se comporteront en sprintf sur un buffer que tu as spécifié, il n'y en a pas, ou il n'y en a pas qui te satisfera complètement (il y aura toujours un fichier temp à créer derrière ...) et en plus au prix d'une complication démesurée.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 34
    Par défaut
    Ok, merci le tuyau

    j'ai fait un fichier temporaire et j'ai utilisé sprintf et ça fonctionne sans trop rajouter de ligne ...

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

Discussions similaires

  1. Redirection de flux standard vers des fichiers
    Par raoulchatigre dans le forum C++
    Réponses: 8
    Dernier message: 29/01/2008, 11h27
  2. redirection de flux console
    Par xolytem dans le forum C++
    Réponses: 4
    Dernier message: 02/02/2007, 12h24
  3. [WD9] Fichier HF vers tableau mémoire
    Par Romanops dans le forum WinDev
    Réponses: 8
    Dernier message: 08/06/2006, 12h10
  4. Redirection du flux d'entree sous linux
    Par Fl4mBy dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 30/08/2005, 15h49
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

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