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();