Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <fcntl.h>
- #include <unistd.h>
- //Init
- struct article_type
- {
- unsigned int code;
- char nom[31];
- unsigned long stock;
- };
- void saisie (struct article_type *p_element);
- void affichage (struct article_type element);
- int ouverture (char *nom, int mode, int droits);
- int fermeture (int descripteur);
- int ecriture (int descripteur, struct article_type element);
- int lecture (int descripteur, struct article_type *p_element);
- int positionner (int descripteur, int position);
- int art_lire;
- void fusion (int descripteur1, int descripteur2, int descripteur3);
- //Main
- int main (int arg, char *argv[])
- {
- struct article_type art1;
- struct article_type art2;
- struct article_type art3;
- int nbs_art1=1, nbs_art2=2;
- int i;
- int doc;
- int mode = O_RDWR;
- int droits = 777;
- if (arg ==3+1)
- {
- //ouverture
- int fd1=ouverture (argv[1], mode, droits);
- //printf("FD : %d\n",fd);
- int fd2=ouverture (argv[2], mode, droits);
- //printf("FD : %d\n",fd);
- int fd3=ouverture (argv[3], mode, droits);
- //printf("FD : %d\n",fd);
- /*
- //init donnée 1
- printf("Entrez le nbs d'aricles n :\n");
- scanf("%d", &nbs_art1);
- for (i=1;i<=nbs_art1;i++)
- {
- saisie(&art1);
- int write1 = ecriture(fd1, art1);
- //printf("write = %d\n", write);
- }
- //init données 2
- printf("Entrez le nbs d'aricles m :\n");
- scanf("%d", &nbs_art2);
- for (i=1;i<=nbs_art2;i++)
- {
- saisie(&art2);
- int write2 = ecriture(fd2, art2);
- //printf("write = %d\n", write);
- }
- */
- //Fusion
- fusion (fd1, fd2, fd3);
- //Lecture
- printf("Entrez le doc à lire :(1-2-3)\n");
- scanf("%d", &doc);
- switch (doc)
- {
- case (1) :
- printf("Entrez l'aricles à lire :\n");
- scanf("%d", &art_lire);
- positionner (fd1, art_lire);
- int lect1 = lecture(fd1, &art1);
- affichage(art1);
- break;
- case (2) :
- printf("Entrez l'aricles à lire :\n");
- scanf("%d", &art_lire);
- positionner (fd2, art_lire);
- int lect2 = lecture(fd2, &art2);
- affichage(art2);
- break;
- case (3) :
- printf("Entrez l'aricles à lire :\n");
- scanf("%d", &art_lire);
- positionner (fd3, art_lire);
- int lect3 = lecture(fd3, &art3);
- affichage(art3);
- break;
- default:
- printf("erreur doc :\n");
- break;
- }
- int ferm1=fermeture(fd1);
- int ferm2=fermeture(fd2);
- int ferm3=fermeture(fd3);
- }
- else
- {
- printf("Entrez 2 fichier de données et 1 fichier a fusionner\n");
- }
- }
- //SP
- void saisie (struct article_type *p_element)
- {
- printf("\nSaisie d\'un article\n");
- printf("Saisie du code\n");
- scanf("%u",&(*p_element).code);
- printf("Saisie du nom\n");
- scanf("%s",(*p_element).nom);
- printf("Saisie du stock\n");
- scanf("%lu",&(*p_element).stock);
- }
- void affichage (struct article_type element)
- {
- printf("\nAffichage d\'un article\n");
- printf("Code: %u\n", element.code);
- printf("Nom: %s\n", element.nom);
- printf("Stock: %lu\n", element.stock);
- }
- int ouverture (char *nom, int mode, int droits)
- {
- int fd;
- fd=open(nom, mode, droits);
- return(fd);
- }
- int fermeture (int descripteur)
- {
- return(close(descripteur));
- }
- int ecriture (int descripteur, struct article_type element)
- {
- return(write(descripteur, &element, sizeof(element)));
- }
- int lecture (int descripteur, struct article_type *p_element)
- {
- return(read(descripteur, p_element, sizeof(*p_element)));
- }
- void fusion (int descripteur1, int descripteur2, int descripteur3)
- {
- struct article_type art1;
- struct article_type art2;
- int suivant_fd1, suivant_fd2 = 0;
- int fin_fd1, fin_fd2 = 0;
- int nb;
- do
- {
- if(fin_fd1==0 && suivant_fd1==0)
- {
- nb=lecture(descripteur1, &art1);
- if(nb<=0)
- {
- fin_fd1=1;
- }
- }
- if(fin_fd2==0 && suivant_fd2==0)
- {
- nb = lecture(descripteur2, &art2);
- if (nb<=0)
- {
- fin_fd2=1;
- }
- }
- if(fin_fd1==0 && fin_fd2==0)
- {
- if(art1.code < art2.code)
- {
- ecriture(descripteur3, art1);
- suivant_fd1=0;
- suivant_fd2=1;
- }
- else
- {
- ecriture(descripteur3, art2);
- suivant_fd1=1;
- suivant_fd2=0;
- }
- }
- else
- {
- if(fin_fd1)
- {
- if(!fin_fd2)
- {
- ecriture(descripteur3, art2);
- suivant_fd2 = 0;
- }
- }
- else
- {
- ecriture(descripteur3, art1);
- suivant_fd1 = 0;
- }
- }
- }while (fin_fd1 == 0 || fin_fd2 == 0);
- }
- int positionner (int descripteur, int position)
- {
- return(lseek(descripteur,sizeof(struct article_type)*(position-1),0));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement