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

Shell et commandes GNU Discussion :

script imitant hexdump


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Par défaut script imitant hexdump
    Bonjour,

    je cherche a faire un script bash qui imite la commande hexdump -C .
    Pour cela je dois d'écrire un script bash qui prend en paramètre un fichier, qui vérifie si le fichier existe (et a les droits de lecture), et qui va produire la même sortie que la commande hexdump -C pour ce fichier.
    Pour cela j'ai devellloper un fichier c qui reçoit un nom de fichier sur la liste de commande et qui se charge d'écrire à l'écran (sa sortie standard) en hexadécimal les codes asci des caractères du fichier.

    voila ou j'en suis(en gros je cherche a "formater" l'affichage )

    Le fichier C qui "convertit" l'ascii en hex
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
     
    {
        FILE* fichier = NULL;
        int caractereActuel = 0;
        fichier = fopen("exo2.c", "r");
     
        if (fichier != NULL)//vérifie que le fichier existe
        {
    do
            {
                caractereActuel = fgetc(fichier); // On lit le caractère
     
                printf("%x ", caractereActuel); // On l'affiche
     
            } while (caractereActuel != EOF);//continue la boucle tant que le fichier n'est pas atteint
            fclose(fichier);
     
        }
        return 0;
    }
    Le script bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/bin/bash
    if  test -w; then
      echo "$1 existe";
    else
    echo "$1 n'existe pas"
    fi
    gcc -o $1 $1.c
    ./$1
    merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    Il me semble que tu ne réponds pas au problème qui t'es posé.
    D'abord, ce que tu as écrit en C ne simule pas la sortie de 'hexdump -C', et n'accepte pas de fichier en entrée (fichier = fopen("exo2.c", "r");).
    Ensuite, le script proprement dit ne fait que lancer la compilation, et éxécuter le programme qui en résulte.

    Je te suggère d'abandonner ton programme écrit en C, et de te pencher sur 'od', qui fait partie du paquet coreutils (utilitaires GNU principaux), et que l'on doit donc trouver sur toute bonne distribution GNU/Linux.
    Tu devrais ensuite pouvoir manipuler sa sortie avec 'sed'
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Il me semble que tu ne réponds pas au problème qui t'es posé.
    D'abord, ce que tu as écrit en C ne simule pas la sortie de 'hexdump -C', et n'accepte pas de fichier en entrée (fichier = fopen("exo2.c", "r");).
    Ensuite, le script proprement dit ne fait que lancer la compilation, et éxécuter le programme qui en résulte.

    Je te suggère d'abandonner ton programme écrit en C, et de te pencher sur 'od', qui fait partie du paquet coreutils (utilitaires GNU principaux), et que l'on doit donc trouver sur toute bonne distribution GNU/Linux.
    Tu devrais ensuite pouvoir manipuler sa sortie avec 'sed'
    ...
    ?
    pour le exo2.c c'est tout simplement parce cela doit juste larcher dans un cas (alors oui demain si j'ai un fichier exo1.c ca ne marche pas mais vu que c'est juste une simulation ca n'importe pas dans ce cas la)

    je sais que cela ne ressemble pas encore a hexdump, comme je l'ai dis le fichier ne fait que transformer du ascii en hex (méthode imposé donc pas le choix )

    en fait au final je dois obtenir ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0000: FF D8 FF E0 00 10 4A 46 49 46 00 01 02 01 00 48  ......JFIF.....H
    0010: 00 48 00 00 FF ED 0A 96 50 68 6F 74 6F 73 68 6F  .H......Photosho
    0020: 70 20 33 2E 30 00 38 42 49 4D 04 04 07 43 61 70  p 3.0.8BIM...Cap

    et pour l'instant j'obtiens ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FF D8 FF E0 00 10 4A 46
    00 48 00 00 FF ED 0A 96
    70 20 33 2E 30 00 38 42

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. Script et XMLmodule
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/01/2003, 16h10
  3. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  4. Réponses: 2
    Dernier message: 11/07/2002, 08h31

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