Skip to content
Extraits de code Groupes Projets
Valider a475c99a rédigé par Jean-Baudouin Zimer's avatar Jean-Baudouin Zimer
Parcourir les fichiers

premier essai de jb

parent d854b95b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #1442 réussi
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <string.h> #include <string.h>
#include <io.h> #include <io.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h> #include <unistd.h>
int is_div(int number, int i) { // Vérifie si i est un diviseur de number. int is_div(int number, int i) { // Vérifie si i est un diviseur de number.
...@@ -91,7 +92,7 @@ void *afficherListe(list_t *liste) { // afficher la liste ...@@ -91,7 +92,7 @@ void *afficherListe(list_t *liste) { // afficher la liste
printf("NULL\n"); printf("NULL\n");
} }
void ecrire_dans_fichier(char *input, char *output) { void lecrire_dans_fichier(char *input, char *output) {
int fichier_entree = open(input,O_RDONLY) ; // ouverture de fichier en mode lecture int fichier_entree = open(input,O_RDONLY) ; // ouverture de fichier en mode lecture
// O_RDONLY , O_WRONLY ou O_RDWR . // O_RDONLY , O_WRONLY ou O_RDWR .
// respectivement l'ouverture du fichier en lecture seule, en écriture seule ou en lecture / écriture. // respectivement l'ouverture du fichier en lecture seule, en écriture seule ou en lecture / écriture.
...@@ -165,7 +166,77 @@ void ecrire_dans_fichier(char *input, char *output) { ...@@ -165,7 +166,77 @@ void ecrire_dans_fichier(char *input, char *output) {
munmap(mapping, sizeof(int)) ; munmap(mapping, sizeof(int)) ;
} }
} }
/* int main() {
void ecrire_dans_fichier(char *input, char *output) { // => en utilisant FILE on a plusieurs fonctions qui facilitenet la vie
FILE * fichier_entree = NULL ;
fichier_entree = fopen(input, "r+") ;
// "r+": lecture et écriture. Vous pourrez lire et écrire dans le fichier.
// Le fichier doit avoir été créé au préalable.
FILE * fichier_sortie = NULL ;
fichier_sortie = fopen(output, "w+") ;
//"w+": lecture et écriture, avec suppression du contenu au préalable.
// Le fichier est donc d'abord vidé de son contenu, vous pouvez y écrire,
// et le lire ensuite. Si le fichier n'existe pas, il sera créé.
if (fichier_entree != NULL || fichier_sortie != NULL) { // si ca ne va pas
return;
}
char *line = malloc(sizeof(int)) ; // j'alloue de la memoire pour line
while (fgets (line, sizeof(int), fichier_entree) != NULL) {
int nombre = strtol(line,NULL,0) ;
// Cette fonction, signifiant string to long, permet de transformer une chaîne de caractères, contenant
// la représentation textuelle d'un entier, en un entier type long.
void* mapping = mmap(NULL, sizeof(int),PROT_WRITE,MAP_SHARED,fichier_sortie,0) ;
/*Établir ne projection en mémoire des fichiers ou des périphériques (
en qq sorte le malloc des fichier
argument :
1er => L'adresse de départ de la nouvelle projection
2eme => longueur
3eme => PROT_WRITE On peut écrire dans la zone mémoire.
4eme => MAP_SHARED Partager cette projection.
5eme => fihcier
6eme => ?
mmap() renvoie un pointeur sur la zone de mémoire, s'il réussit. En cas d'échec il retourne la valeur MAP_FAILED (c'est-à-dire (void *) -1)
http://manpagesfr.free.fr/man/man2/mmap.2.html
*/
memcpy(mapping,line, sizeof(int)) ;
/*void * memcpy (void * dest, const void * src, size_t n) copie n caractères de la zone mémoire src vers la zone mémoire dest .
argument :
dest - Il s'agit du pointeur vers le tableau de destination où le contenu doit être copié, transtypé en un pointeur de type void *.
src - Il s'agit d'un pointeur vers la source des données à copier, transtypées en un pointeur de type void *.
n - Il s'agit du nombre d'octets à copier.
Cette fonction renvoie un pointeur vers la destination
https://www.tutorialspoint.com/c_standard_library/c_function_memcpy.htm
*/
fputc((int) mapping, fichier_sortie) ; // Ecriture dans le fichier
list_t *liste = prime_divs(nombre) ;
if (liste == NULL) {
continue ;
}
else {
node_t *noued = liste -> head;
while (noued != NULL)
{
char *nombre_devient_char = NULL;
sprintf(nombre_devient_char, "%d", noued -> nombre_premier) ;
/* https://www.geeksforgeeks.org/sprintf-in-c/
* int sprintf (char * str, const char * string, ...)
Au lieu d'imprimer sur la console, il stocke la sortie sur le tampon de caractères spécifié dans sprintf
*/
fputc((int) nombre_devient_char, fichier_sortie) ;
noued = noued -> next;
}
printf("\n");
}
munmap(mapping, sizeof(int)) ;
}
}
/*int main(int argc, char *argv[]) {
// test pour is_div(int number, int i) // test pour is_div(int number, int i)
int number = 10 ; int number = 10 ;
int number1 = 11 ; int number1 = 11 ;
...@@ -185,4 +256,4 @@ void ecrire_dans_fichier(char *input, char *output) { ...@@ -185,4 +256,4 @@ void ecrire_dans_fichier(char *input, char *output) {
// je ne vois pas pq ca ne fonctionne pas // je ne vois pas pq ca ne fonctionne pas
printf("%d\n",afficherListe(liste)) ; printf("%d\n",afficherListe(liste)) ;
return 0; return 0;
} */ }*/
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter