From 8bddab0b571e5586ec10adbd91e6ac0025d2d3cd Mon Sep 17 00:00:00 2001
From: Moncef STITI <moncef.stiti@etu.u-pec.fr>
Date: Tue, 3 Dec 2024 19:43:56 +0100
Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20version=20non=20s?=
 =?UTF-8?q?=C3=A9curis=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Unsecured/unsecured_transaction.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/Unsecured/unsecured_transaction.c b/Unsecured/unsecured_transaction.c
index 66a38f7..293bdd7 100644
--- a/Unsecured/unsecured_transaction.c
+++ b/Unsecured/unsecured_transaction.c
@@ -8,37 +8,35 @@
 
 #define ACCOUNT_SIZE 16
 #define MAX_NAME_LEN 10
-#define MAX_BALANCE_LEN 5
 #define FILENAME "../Data/accounts.db"
 
-// Fonction pour lire un compte dans le fichier
+// Fonction pour lire un compte dans le fichier avec verrouillage
 void read_account(int fd, int index, char *name, int *balance) {
     char buffer[ACCOUNT_SIZE];
+
     lseek(fd, index * ACCOUNT_SIZE, SEEK_SET);
     read(fd, buffer, ACCOUNT_SIZE);
-    sscanf(buffer, "%10s %d", name, balance);
+    sscanf(buffer, "%7s %d", name, balance);
 }
 
-// Fonction pour écrire un compte dans le fichier
+// Fonction pour écrire un compte dans le fichier avec verrouillage
 void write_account(int fd, int index, const char *name, int balance) {
     char buffer[ACCOUNT_SIZE];
 
     // Formater la chaîne avec un nom de 10 caractères et un solde de 5 caractères, espace rempli si nécessaire
-    snprintf(buffer, ACCOUNT_SIZE, "%-10s%5d", name, balance);
+    snprintf(buffer, ACCOUNT_SIZE, "%-7s%8d", name, balance);
 
     // S'assurer que le buffer est exactement de taille ACCOUNT_SIZE
-    // Ajouter des espaces si nécessaire pour remplir la ligne
     for (int i = strlen(buffer); i < ACCOUNT_SIZE - 1; i++) {
         buffer[i] = ' ';
     }
     buffer[ACCOUNT_SIZE - 1] = '\n';  // Assurez-vous que la ligne est terminée correctement
 
-    // Positionner et écrire dans le fichier
     lseek(fd, index * ACCOUNT_SIZE, SEEK_SET);
     write(fd, buffer, ACCOUNT_SIZE);
 }
 
-// Fonction pour effectuer une transaction
+// Fonction pour effectuer une transaction avec verrouillage
 void perform_transaction(int fd, int account_count) {
     int from_idx = rand() % account_count;
     int to_idx = rand() % account_count;
@@ -56,7 +54,7 @@ void perform_transaction(int fd, int account_count) {
     // Calculer un montant aléatoire à transférer (max 20% du solde source)
     int max_transfer = from_balance / 5;
     if (max_transfer > 0) {
-        int transfer_amount = rand() % max_transfer;
+        int transfer_amount = rand() % max_transfer + 1;
 
         // Effectuer la transaction
         from_balance -= transfer_amount;
@@ -82,7 +80,7 @@ void process_transactions(int transactions, int account_count) {
 
     for (int i = 0; i < transactions; i++) {
         perform_transaction(fd, account_count);
-        usleep(rand() % 100000); // Temporisation aléatoire
+        //usleep(rand() % 100000); // Temporisation aléatoire
     }
 
     close(fd);
@@ -120,7 +118,8 @@ int main(int argc, char *argv[]) {
     int num_processes = atoi(argv[1]);
     int transactions_per_process = atoi(argv[2]);
 
-    srand(time(NULL));
+    unsigned int seed = getpid() ^ time(NULL);
+    int random_value = rand_r(&seed);
 
     // Calcul du solde total initial
     int initial_balance = calculate_total_balance();