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 :

inclure un fichier comme constante


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Par défaut inclure un fichier comme constante
    Bonsoir,
    J'ai un programme qui en partie est un serveur http. J'ai un fichier html que je voudrais envoyer lorsque quelqu'un le demande,
    mais mon problème est que le traitement du fichier et son envoi est bien trop lent.
    Donc je me suis demandé s'il était possible d'inclure le fichier comme constante pour qu'il l'envoi directement.
    J'ai essayé de le copier coller directement dans mon programme mais une partie de la page ne fonctionne pas.
    Quelqu'un aurait une alternative à mon problème ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ton problème me semble encore assez flou. Non pas que mettre un fichier en tant que grosse string soit difficile, mais toute ta description technique pêche un peu.
    Tout d'abord tu parles de programme qui est en partie serveur web. Tu as des serveurs web clés en main disponibles tels que Apache, Commanche, lighttpd donc que vas-tu t'embêter à réinventer la roue ?
    Ensuite c'est quoi ce "traitement de fichier" dont tu parles ? On demande un fichier à un serveur web il l'envoie.
    Et si le délai de réponse ne convient pas au client, alors peut-être s'orienter vers des protocoles de transferts plus directs (pipes, sockets).

    Mais pour répondre à ta question oui, tu peux stocker un fichier en dur dans ton code; Tu écris char fichier[]="........ tout le fichier ........" et tu as ton fichier en dur (attention toutefois à la taille selon la nature de la variable "fichier" (si c'est une automatique alors elle est stockée dans la pile et la pile c'est pas super gros).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Par défaut
    Désolé, je suis jamais assez claire.
    Je dois faire un programme qui envoie du code en connexion tcp à un appareil qui l'exécute. Sauf que je dois faire une interface que je pensais faire en html.
    Mon problème, c'est comme tu le dis, je voudrais faire : char fichier[]="........ tout le fichier ........",
    mais mettre tout le fichier comme ça peut être problématique si le fichier contient également des guillemets.
    Quand j'envois mon fichier en le lisant, il n'y a aucun problème, mais il lui faut du temps, alors que si je copie mon fichier dans une variable, du code javascript dans le fichier ne s'exécute pas. (c'est surement moi qui rectifie mal les guillemets)
    Je me disais donc si il n'y avait pas une directive qui pouvait faire : char fichier[]= #include "monfichier" pour pas s'en occuper.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par matrob72 Voir le message
    Désolé, je suis jamais assez claire.
    Pas grave. Une seconde explication plus tard et tout est clarifié

    Effectivement, les guillemets sont un détail auquel je n'ai pas pensé. On peut tenter un parseur qui transformera tous les " en \" mais si le fichier contient lui-même du \" alors faut transformer en \\\" et bon bref...

    Et pour la directive char fichier[]= #include "monfichier" malheureusement il faut oublier. Les directives "#include" sont des directives de pré-processeur, qui se passent même avant la compilation. C'est à dire que le compilateur, quand il bouffe le source pour générer de l'objet, il bouffe un source déjà transformé dans lequel tous les "#include" et "#define" ont été remplacés par leur équivalent. C'est pour dire que cette directive se place bien bien en amont de l'exécutable. Ou alors tu génères le source "à la volée", source qui contient ce char fichier[]= #include "monfichier" puis tu compiles ce source là encore "à la volée" et bref... mis à part un challenge "pour le plaisir" cette solution risque de coûter plus cher à produire et à maintenir que le gain obtenu
    Et attention à la solution "javascript qui contient le fichier" car le code javascript est du code stocké côté serveur http et envoyé au client intégré dans le html. Alors envoyer un fichier ou envoyer un code javascript qui contient le fichier...

    Maintenant, pourquoi ne pas connecter le formulaire client à un cgi-bin serveur ?

    Tu dis que tu as une interface html. Je présume que cette interface se situe chez le client et est du style d'un gros bouton "envoyer le fichier".
    Donc tu relies ce bouton à une action sur ton serveur (Apache ?) style form method="post" action="cgi-bin/envoyer". Et le programme "envoyer" qui est sur ton serveur (dans le dossier "cgi-bin" de Apache), écrit en C, se charge alors de lire le fichier et l'envoyer via socket tcp chez le client (qui doit alors bénéficier de son côté d'un programme "serveur" chargé d'attendre la connexion "tcp" de "envoyer" puis récupérer le fichier transmis).
    La comm se faisant en C et non en http, ça devrait aller assez vite non ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Par défaut
    😑 je suis effectivement très null à expliquer le contexte pensant que se ne soit pas très utile...
    Pour information, je suis en apprentissage chez une entreprise donc je suis un débutant sur la programmation en c. D'autant plus que j'ai appris tout seul chez moi.
    Mon programme est seulement un utilitaire, pas pour des clients. Ensuite, ma connexion TCP est sur un appareil de mesure qui doit être configuré. Donc ma page n'envoit que des information de configuration au programme qui lui envoit la configuration à faire et reçoit seulement les mesure prise. J'ai pensait utiliser une interface web car je ne suis pas encore à l'aise avec gtk, Qt... En plus d'etre portable assez facilement. Je voulais donc mettre des morceaux de page html directement dans le programme pour faciliter son déplacement sans pour autant déplacer un dossier avec trop de fichiers.
    Voilà pour le contexte...
    Maintenant oui, je sais qu'il faut mettre \ devant les guillemets, mais quand il y en à trop, on peut en rater. Enfin voilà. Mon problème, c'est que je n'arrive pas à trouver ce que j'ai mal copier ou les guillemets que j'ai louper...

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Citation Envoyé par matrob72 Voir le message
    je sais qu'il faut mettre \ devant les guillemets, mais quand il y en à trop, on peut en rater
    Il faut coder une moulinette/ parser (programme en ligne de commandes) qui prend en paramètre 1) ton code source utilitaire (util.h ou util.c) et 2) ton fichier à intégrer (ou des fichiers ???)
    Et qui va produire en résultat ton code source utilitaire avec ton fichier intégré en chaîne de caractères (util_final.h ou util_final.c)

    Cette moulinette va
    1. ouvrir ton code source utilitaire et trouver l'endroit où mettre la chaîne de caractères. À toi de voir comment faire (souvent avec des commentaires spéciaux pour délimiter la zone)
    2. ouvrir ton fichier à intégrer
    3. le lire, échapper tous les caractères spéciaux et écrire la chaîne de caractères.


    Pour échapper les caractères spéciaux, soit
    1. tu prends cette liste et tu codes le maximum en rajoutant au fil de l'eau à chaque fois que tu en as loupé 1
    2. tu recherches une bibliothèque C qui le fait
    3. tu le fais à la main avec un site Internet, mais ce n'est plus automatique

    Et évidemment au préalable, ton fichier à intégrer doit être en anglais autant que faire se peut

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

Discussions similaires

  1. Faire un fichier avec des tableaux comme constantes
    Par vincent.mbg dans le forum C
    Réponses: 9
    Dernier message: 24/06/2010, 20h09
  2. Inclure un fichier de constantes
    Par aymron dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2007, 08h04
  3. Réponses: 20
    Dernier message: 22/03/2005, 21h07
  4. Inclure un fichier html
    Par krfa1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 08/02/2005, 14h40
  5. [HTML] inclure un fichier...
    Par mohican13 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/01/2005, 17h23

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