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

Discussion :

Copier des chunks rapidement !


Sujet :

GTK+ avec C & C++

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 1 077
    Points : 1 740
    Points
    1 740
    Par défaut Copier des chunks rapidement !
    Copier un unique (gros) fichier d’une source vers une destination donnée n’est pas une tâche pour laquelle les systèmes sont toujours optimisés.


    Selon la philosophie UNIX, un programme doit accomplir une unique tâche précise et l’accomplir du mieux possible. C’est ce qui a donné naissance à gfast-copy et à fast-copy . Ces programmes font une chose banale mais le font bien.






    J’ai développé ces deux programmes car je copie souvent de gros fichiers (vidéos, images ISO, grosses archives, etc.) de «droite à gauche» et de «gauche à droite». Et je trouvais que les systèmes d’exploitation copiaient trop lentement, parce qu’ils faisaient parallèlement autre chose, alors j’ai décidé de déléguer cette tâche à un binaire.


    J’ai lu dans les manuels GNU qu’un programme qui dispose d’une interface graphique doit pouvoir accomplir la même tâche dans un (pseudo) terminal, alors j’ai écrit deux petits programmes en langage C : gfast-copy (Graphical FastCopy) et fast-copy (FastCopy).


    gfast-copy (Graphical Fast Copy).

    gfast-copy dispose d’une interface graphique simple:




    Tout en haut, se trouve une barre de menu. Puis, alignés verticalement, viennent :

    * un bouton étiqueté Source avec une icône qui vous permet de choisir le fichier à copier ;
    * à côté, se trouve un bouton interrupteur affichant une simple icône permettant d’effacer le fichier source ou pas après la copie ;
    * un bouton étiqueté Destination avec une icône vous permettant de choisir le l’emplacement et le nom du fichier de sortie (vous pouvez écraser un fichier).
    * à côté se trouve un bouton permettant de lancer la copie ;
    * et, en bas, une barre de progression affichant la progression rapide de la copie.

    fast-copy (Fast Copy)
    fast-copy est un outil en ligne de commande permettant de faire la même chose que gfast-copy mais depuis un terminal et, du coup, plus rapidement.



    Ce programme permet aussi:

    + d’écraser la destination ;
    + d’effacer le fichier source après la copie ;
    + d’utiliser les appels système au lieu des flux (comportement par défaut).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $ fast-copy -h
    fast-copy - a fast chunk file copy program.
     
    Usage : fast-copy -r input-file -w output-file [-o] [-s] [-e] [-h]
    	-r Read from file (required).
    	-w Write to file  (required).
    	-o Overwrite destination file (optional).
    	-e Erase source file (optional).
    	-s Use syscalls instead of streams (optional only UNIX).
    	-h Print this help message.
     
    - Copyright (©) 2017 Brüggemann Eddie <mrcyberfighter@gmail.com> GPLv3.


    Algorithme de copie.

    1. Le programme cherche d’abord la taille optimale de tampon*:
    - soit en regardant si la constante `BUFSIZ` est définie et si elle est assez grande,
    - sinon, la taille du tampon est mise à ``8192`` octets,
    - si le programme utilise les appels système, il va regarder la taille optimale du tampon dans le système de fichiers ;
    2. le programme définit un tampon de la taille optimale ;
    3. le programme va copier dans une boucle très rapide la source vers la destination affichant une barre de progression ;
    4. une fois la copie effectuée avec succès le programme va mettre à jour le système de fichiers ;
    5. si vous le désirez le programme va supprimer le fichier source.

    Compatibilité et portages

    Les programmes ne requièrent que GTK+ en version supérieure ou égale à 3.14 (fast-copy et ne font qu’un petit usage de GLib et de Gio).

    Les programmes existent pour plusieurs systèmes d’exploitation :

    GNU/Linux

    + un paquetage *.deb ;
    + un paquetage *.rpm ;
    + un tarball basé sur les autotools.


    Windows

    + un fichier *.exe auto‐extractible ne comprenant que gfast-copy;
    + le tarball permet de compiler avec MSYS2 et Cygwin (les dernières versions en date d’aujourd’hui).


    macOS (Sierra 10.12)

    Le tarball permet de compiler les programmes et vous crée une icône dans le dossier /Applications.


    Note : Vous pourrez télécharger GTK 3 grâce à brew et suivre les instructions d’installation.

    Notes de l’auteur

    N’utilisez ces deux programmes que pour copier de gros fichiers. Pour les autres, votre système d’exploitation s’en occupe très bien.


    Si vous préférez la rapidité de votre système d’exploitation alors n’utilisez pas ces programmes.

    Pourquoi ces programmes ne permettent pas de copier plusieurs fichiers à la fois (surtout fast-copy)  ?
    Car il existe des outils pour cela et le récursivité des chemins de fichiers de destination n’est pas une chose facile.

    Car, comme je l’ai dit, je les ai développés à des fins personnelles mais je désire les partager.


    Note : J’ai sûrement péché d’avoir mis une option pour chaque chemin de fichier, mais regardez la notice, vous trouverez un exemple de «wrapper» de fast-copy très pratique.

    Performances
    Cela dépend de plusieurs facteurs : le système d’exploitation sur lequel est utilisé le programme, la charge de la machine et, bien sûr, la nature des sources et cibles de l’opération de copie :

    * disque dur interne vers un disque dur interne ;
    * disque dur interne vers un disque dur externe ;
    * disque dur externe vers un disque dur interne.




    + Télécharger le paquetage Debian de gfast-copy
    + Télécharger le paquetage RPM de gfast-copy
    + Télécharger la version Windows de gfast-copy
    + Télécharger l’archive tar de gfast-copy
    + README de gfast-copy.
    + GitHub de gfast-copy
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    24 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 24 466
    Points : 180 086
    Points
    180 086
    Billets dans le blog
    50
    Par défaut
    Bonjour,

    C'est intéressant. Avez vous des comparaisons de performances avec UltraCopier et avec dd (et mv ou cp) ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 1 077
    Points : 1 740
    Points
    1 740
    Par défaut
    Ces programmes sont basé sur la philosophie UNIX:


    Faire un programme qui s'acquitte d'une tâche bien précise. Et qui le fait le mieux possible
    Et ces programmes fait a la va vite il faut avouer n'ont pas de chiffres de mesures de performances, car je n'y ai pas penser:

    ---

    J'ai construit ces programmes pour palier le manque de vitesse, a but personnel, de copie des chunk files (Surtout des films) dans l'environnement de bureau gnome ou de Windows 7.

    C.a.d le (copier ou couper) - coller… (Dans le file manager).
    A des fins personnels,

    mais je le mets a disposition de la communauté

    si cela intéresse quelqu'un.

    Car il faut dite que mon système Windows 7 rame quand il s'agit de copier un seule film.

    Et que je suis gagnant avec gnome grâce au wrapper.

    Sans me préoccuper de mesures de performances.

    ---

    Vous pouvez modifier mon code comme vous le désirez grâce a ces gens qui milite pour notre liberté face aux multinationales privatives et la licence GPLv3.

    Si ils se battent, alors pourquoi pas moi ?

    Merci pour vos commentaires.

    ---

    Enfin il faut dire que les performances des 2 programmes dépendent de pas mal de facteurs:

    * l'O.S

    * La charge système.

    * Le uptime

    * Selon la direction (disque externe -> disque interne et vice versa).

    * Etc…

    Et peuvent s'avérer exécrables comme de suite après le démarrage et de disque externe vers disque externe.

    ---

    Mais les programmes sont disponibles pour les 3 principaux O.S:

    + Windows (sans fast-copy).

    * Le tarball supporte MSYS2 et Cygwin.

    + MacOSX

    * Le tarball crée une entrée dans le dossier "/Applications" (n'oubliez pas "adwaita-icon-theme").

    + GNU/Linux

    Et tous système UNIX peut être compatible.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    24 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 24 466
    Points : 180 086
    Points
    180 086
    Billets dans le blog
    50
    Par défaut
    cp ou dd sont aussi, je crois (croyais ?) des programmes spécifiques n'effectuant qu'une unique tâche. Je dis ça, c'est aussi car je ne comprends pas vraiment votre réponse.
    Sur Windows 7, vous estimez un souci de lenteur, ne serait-ce pas à cause d'une mauvaise configuration (je connais le cas pour les lecteurs CD, qui se mettent dans un mode dégradé après un trop nombre d'erreurs de lecture).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 1 077
    Points : 1 740
    Points
    1 740
    Par défaut
    Il faut dire que avec Windows 10 la vitesse de copie est plus rapide qu'avec mon Windows 7.

    J'aurais pas dû distribuer le programme aussi bêtement que je l'ai fait:

    1. Pas de mesures des performances !

    2. La vérifications des arguments !

    Comme dans fast-copy (command-line tool) je ne vérifie pas la valeur de retour de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *src_filepath = g_file_get_path(g_file) ;
    Ce qui est une faute de programmation de ma part parmi tant d'autres.

    ---

    Du moins on ma reprocher:

    1. Ne pas avoir fournis de mesure de performances avec la distribution du programme.

    2. Avoir négliger la vérification des arguments.

    L'on apprends de ses erreurs, qu'en pense tu ?

    Merci pour ton intérêt pour (g)fast-copy.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/11/2005, 11h49
  2. Copier des lignes d'une table
    Par thomas_strass dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 01/07/2005, 15h42
  3. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01
  4. copier des fichiers
    Par Daeron dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/11/2004, 14h45
  5. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 07h55

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