begin process at 2013 05 23 10:42:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

question sur les boucles en C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

question sur les boucles en C

jeudi 21 juin 2012 à 14:33:40 | question sur les boucles en C

sucatraps

bonjour, je voudrais savoir quand est ce qu'une boucle ne fonctionne plus en C (je veux dire qu'il n'execute plus les instructions) alors que j'ai tout essayé ?
merci de me répondre.
jeudi 21 juin 2012 à 15:27:22 | Re : question sur les boucles en C

CptPingu

Administrateur CodeS-SourceS
Bonjour.

Si tu ne montres pas ton code, il est impossible de t'expliquer ce qu'il ne vas pas !
(Merci de poster le code qui te pose problème, dans des balises de code).


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 21 juin 2012 à 16:09:14 | Re : question sur les boucles en C

sucatraps

merci de ta réponse.
J'ai récemment lu dans un article que pour qu'une information soit totalement détruit du dique dur, il fallait qu'une autre information le remplace 35 fois dans la mémoire.
Alors j'ai écrit un petit code qui demande de rentrer un nombre (en Mo) et ensuite il réalise 35 passes (il crée une quantité de donnée et ensuite il le détruit 35 fois).
Le code fonctionne comme il devrait, mais je voudrais lui ajouter une fonctionnalité qui va commencer a
1 Mo puis a 2 Mo 3 etc...
De façon qu'il rende toute récupération de donnée impossible.
J'ai éssayé de créer une variable qui devait être incrémentée, mais elle s'est incrémentée une seule fois et après ca elle s'est arrêté.

voile le code :
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(int argc, char *argv[])
{   
    system("color 9");
    
    int nombre = 0, megaO, compteur = 0, multiplicateur = 0, tour = 0;
        
    printf("\t\t   Entrez une quantite d'information en Mo :  ");
    scanf("%d", &nombre);
    
    megaO = nombre;      // La variable megaO garde la valeur de nombre car nombre change de valeur
    
    nombre *= 10500;  // On multiplie nombre par 10500 pour que 100 * | valle 1 Mo   

         while (tour < 35)
         {
              tour++;
              FILE* fichier = NULL;
              fichier = fopen("memo.txt", "w");
         
              while (compteur < nombre)
              {
                   fputs("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||", fichier);
                   compteur++;
              }
    
              printf("\n");
              printf("\t           %d Mo Cree et Supprimee dans la memoire\n\n\n\n", megaO);  // On récupère megaO qui n'a pas changé contrairement a nombre
              printf("\t\t\t\t   Tour %d \n", tour);
              printf("\t\t\t========== Terminee ==========\n\n\t\t   ");
              compteur = 0;    
              fclose(fichier);
              remove("memo.txt");
         }
      
  system("PAUSE");
  return 0;
}


merci de m'aider.
jeudi 21 juin 2012 à 16:33:40 | Re : question sur les boucles en C

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Je pense qu'avant d'aller plus loin, un petit cours sur la "mémoire" ou le "filesystem" pourrait t'être profitable :)
http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_fichiers

Il n'y a pas besoin d'effacer 35 fois une information. C'est juste que quand tu effaces une information, l'ancienne valeur n'est pas écrasée, mais prête à l'être (pour des raisons évidentes de performances). La zone est simplement marquée comme "disponible" si tu préfères. C'est en ça, qu'on dit qu'une donnée est récupérable.
Là tu crées juste 35 fichier que tu effaces de suite. Tu n'as pas la garantie que ça fonctionnera (aucune garantie que le fichier sera mappé au même endroit). C'est même quasi inutile. Il faudrait que tu écrives un fichiers de presque la taille du disque, ce qui est extremêment couteux (surtout si tu as disque > 1 To), et sans avoir la garantie forte que ça ait fonctionné. Le faire 35 fois est juste fantaisiste...

Tout ce que tu peux faire, de manière efficace et en un temps acceptable, c'est supprimer un fichier en utilisant ce qu'on appelle du shredding. En gros, tu ouvres un fichier existant voué à suppression, tu altères l'ensemble de ses octets, puis tu effaces. Ça permet de supprimer le fichier sans laisser les anciennes valeurs. Et donc de ne pas laisser la possibilité de récupérer ce fichier.

Tu peux regarder le code source de "shred" qui est un outil Unix disponible dans le paquet "coreutils".

Pour répondre à ta question: Merci de préciser ton problème. J'ai testé ton code et j'ai bien "35" tours. Je ne comprends pas ton problème technique.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 21 juin 2012 à 17:50:12 | Re : question sur les boucles en C

sucatraps

"Il faudrait que tu écrives un fichiers de presque la taille du disque"
Si j'ai bien compris il faut que je fasse une boucle infinie qui va écrire automatiquement quelque chose dans un fichier et quand ce fichier atteindra 260 Go (la mémoire de mon ordinateur) et si ensuite je l'efface, les données seront irrecupérable ?

Je vais essayer d'expliquer le problème le mieux que je peux :
Au début du code, il demande d'entrer une valeur qui va être stocké dans la variable nombre.
Il le fait et créer un fichier (par exemple 100 Mo) puis le détruit et ce 35 fois.
Il fait exactement ce que je lui demande, mais ce que je veux faire c'est :
Au lieu de demander d'entrer une valeur, je vaux que cette valeur valle 1 et quand il a fini, il doit être incrémenté encore et encore jusqu'a 260 000 (toute la méloire du pc).
Pour être plus clair, le code ne pas demander d'entrer une variable mais au lieu de cela au aurait par exemple
une variable x qui aurait pour valeur 1.
Le code fera ce qu'il doit faire (créer une fichier de 1 Mo et le détruire) et lorsqu'il aura fini (35 fois)
il faut que la variable x soit incrémenté (il va créer un fichier de 2 Mo et le détruire).
Lorsqu'il aura fini, la variable x vaudra 3 et ainsi de suite...
Jusqu'a 260 000

Est ce qu'avec cette technique (même si ca prendrait plusieurs semaines) on peut encore récupérer quelque chose ?
jeudi 21 juin 2012 à 18:20:41 | Re : question sur les boucles en C

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !

Si j'ai bien compris il faut que je fasse une boucle infinie qui va écrire automatiquement quelque chose dans un fichier et quand ce fichier atteindra 260 Go (la mémoire de mon ordinateur) et si ensuite je l'efface, les données seront irrecupérable ?


Les données seront "peut être" irrécupérables.

Est ce qu'avec cette technique (même si ca prendrait plusieurs semaines) on peut encore récupérer quelque chose ?


Ça reste de la bidouille. Donc tu n'as pas la garantie que cette méthode détruise à 100% les données. Mieux vaut faire un formattage du disque.
Encore une fois, il est plus efficace de prendre des actions avant suppression du fichier.

Au lieu de demander d'entrer une valeur, je vaux que cette valeur valle 1 et quand il a fini, il doit être incrémenté encore et encore jusqu'a 260 000 (toute la méloire du pc).
Pour être plus clair, le code ne pas demander d'entrer une variable mais au lieu de cela au aurait par exemple
une variable x qui aurait pour valeur 1.
Le code fera ce qu'il doit faire (créer une fichier de 1 Mo et le détruire) et lorsqu'il aura fini (35 fois)
il faut que la variable x soit incrémenté (il va créer un fichier de 2 Mo et le détruire).
Lorsqu'il aura fini, la


Ce n'est plus des semaines, mais des années avec cette technique ! Beaucoup trop long, pour un résultat pas forcément efficace...
Ce n'est pas très adapté:
- Si le fichier est trop petit, tu risques de rester sur la même zone disque, et donc ça ne sert à rien.
- Si le fichier est trop gros, tu ne pourras tout simplement pas le créer.
- Si le fichier est trop gros et peut être quand même créé, tu n'iras pas forcément sur les zones ne pouvant l'acceuillir, et tu ne "supprimeras" donc pas tout.
- Avec cette méthode, tu vas géner les autres processus qui écrivent, et générer une belle fragmentation du système => Lenteur.
- Sans compter que la création de millions de fichier de 1 mo va pourrir l'index du filesystem... Et le faire gonfler inutilement.

Techniquement: Tu demandes une valeurs "nb". Tu incrémentes une variable i, tant que i < nb. Je te conseille de découper ton code en petite fonction.

J'insiste encore: Cette méthode n'est pas la bonne. Si tu veux protéger tes informations deux solutions:
- Le file shredding (réécriture du fichier avant suppression)
- Le chiffrement de disque (avec truecrypt par exemple)

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
jeudi 21 juin 2012 à 18:32:55 | Re : question sur les boucles en C

sucatraps

je pense que je vais essayer de comprendre le file shredding.
merci pour tes réponses.


Cette discussion est classée dans : question, boucles


Répondre à ce message

Sujets en rapport avec ce message

question..... [ par ya-1-bleme ] Comment on fait pour ecrire dans un EDIT la ?? je cherche depuis 2 heures et j'trouve pas;...Merci a ceux qui pourront me renseigner :0) Une petite question [ par C++ ] Je peux savoir pourquoi vous aidez personne ?pourquoi vous faite pas un tutorial bien complet(mfc)?Franchement ce site il pu y a que des sources merdi Arnotic, petite question... [ par NitRic ] J'aimerais simplement savoir s'il va y avoir un ou des défi(s) sur cppfrance comme il y à eu sur vbfrance... ? Question simple [ par SysBreak ] Salut, j'ai Borland C++ 5 v.pro et j'aimerais savoir dans quel répertoire je dois enregistrer mes fichiers sources créés ? Pour les projets j'ai bien visual c ou c++ builder [ par seb ] Bonjour,La question est simple.Lequel de ces deux environnements est le plus adaptes a l'avenir, et quelle librairie entre mes mfc et la vcl est la pl Question sur Windows.h [ par GoldenEye ] Connaissez vous un site qui propose la description des fonctions de Windows.h ( même question pour dos.h )MerciGoldenEye une question toute simple.. aidez moi, stp!!! [ par xose ] Je viens d'installer le Borland C++. Une fois que le programme est compilé, la fenetre noire disparait toute suite!! Je n'arrive pas à voir jamais les la question qui tue ! [ par cedcrow ] Salut,je lance une application windows fille(B) à partir d'une dll d'une appli windows mère(A). Pour cela je fait un spawn avec le paramètre _P_WAIT p Flux de sortie... [ par MorZong ] B'jour,Alors moi j'ai une question pour un champion :Est-ce que quelqu'un sait comment définir un mot-clef (ou peu importe comment ca se nomme) qui au la p'tite question pas méchante... [ par cedcrow ] bonjour à tous,je souhaiterais réaliser une appli windows qui n'aurait pas un format de fenetre standard, du style les applications multimédia de lect


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,174 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales