Linux
Résolumimi_lynda Messages postés 32 Statut Membre -
exo:
on desire traiter des fichiers linux ayant la structure suivante:
-une zone d'entete qui consiste en un entier de votre choix
-une suite d'objets ayant la structure suivante:-nom
-prenom
-age
les operations a realiser sur de tels fichiers sont:
*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui donne la valeur du i=eme enregistrement.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
*une fonction qui modifie le i=eme enregistrement .
*une fonction qui affiche en cas d'erreue dans un appel systeme le numéro et le message correspondant à l'erreur .
merci d'avance de mavoir aidé!
Configuration: Windows XP Internet Explorer 7.0
35 réponses
- 1
- 2
Le sujet porte sur le traitement de fichiers avec une zone d'entête entière et une suite d'enregistrements nom, prénom et age, incluant ouverture, affichage, comptage et accès au i-ème enregistrement. Plusieurs réponses évoquent une approche en C sur Linux avec des structures binaires et des appels système, puis l'affichage ou l'écriture des enregistrements et la gestion des erreurs. D'autres proposent des variantes comme l'utilisation de fichiers texte plutôt que binaires, ou des exercices complémentaires sur deux processus et la synchronisation par signaux ou par pipe. En pratique, des exemples de code montrent des fichiers binaires avec en-tête et enregistrements, et soulèvent des questions sur l'environnement Windows et Linux et sur le choix des appels d'ouverture et de lecture.
-
De rien !
Mais quel est exactement ton problème technique ?
Dal -
re,
je veux le code'les commandes linux'qui me permettent de creer ce fichier ayant la structure demandée,
et les fonctions linux aussi (demandées) pour pouvoir manipuler ce fichier.
si vous metrisez linux vous pouvez comprendre de quoi il s'agit.
si vous pouvez m'aidez n'hesiter pas car j'en ai besoin.
merci une 2eme fois -
Salut,
Commence par nous exposer ce que tu as déjà fait, ensuite on verra ce que l'on peut pour toi ;-))
-
Salut,
ce n'est pas un exo en langage C par hasard? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
non,jai rien fait car,
j'ai peu de connaissance sur linux ,je sais juste crrer des fichier simples a travers le c++
mais ca c'est du pur linux et moi je connais pas l'environement linux,mais je dois faire ce travail . -
et le nombre entier qui est au début de fichier ce n'est pas par hasard le nombre d'enregistrements ?!
-
je dois faire ce travail .
Dans quel but ?
-
oui, exactement cest un exo en langage c,et vu que je ne metrise pas linux et c ou c++ jai besoin d'aide!!
merci lami20j -
bonjour,
j'ai du mal à comprendre la logique :
une zone d'entete
à quoi sert-elle dans l'exercice ???
affichage des enregistrement.
enregistrements de quoi ?
-une suite d'objets ayant la structure suivante:
-nom
-prenom
-age </ital>
on peut supposer y mettre ce qu'on veut d'autre .... :-)
une fonction qui affiche en cas d'erreue dans un appel systeme le numéro et le message correspondant à l'erreur .
pourquoi faire ?
décidemment je comprend rien à rien ...trop dur pour moi l'informatique ! -
bsr,je veux qlq'un qui metrise le c (c++) sous linux pour m'aider a faire un exo
merci davance ! -
Salut,
voici un début
Le code permet de créer des enregistrements et ensuite d'afficher le contenu du fichier
tu crées d'abord un fichier vide avec la commandetouch personne.dat
ensuite tu compile ce p'tit code et tu l'exécute#include<stdio.h> #include<stdlib.h> typedef struct Personne_{ char nom[100]; char prenom[100]; int age; }Personne; void AjouterEnregistrement(int *nb); void Afficher(int *nb); int main() { int nb; char choix = 'o'; while(choix == 'o'){ AjouterEnregistrement(&nb); getchar(); printf("Voulez vous continuer o/n ? "); choix = getchar(); } Afficher(&nb); return 0; } void AjouterEnregistrement(int *nb){ FILE *fb; Personne nouveau; if(NULL ==(fb=fopen("personne.dat","r+b"))) exit(EXIT_FAILURE); if(fread(nb,sizeof(int),1,fb)==0) *nb = 0; printf("--- Ajouter une nouvelle personne ---\n"); printf("Nom : "); scanf("%s",nouveau.nom); getchar(); printf("Prenom : "); scanf("%s",nouveau.prenom); getchar(); printf("Age : "); scanf("%d",&nouveau.age); *nb = *nb +1; fseek(fb,0,SEEK_SET); fwrite(nb,sizeof(int),1,fb); fseek(fb,0,SEEK_END); fwrite(nouveau.nom,100,1,fb); fwrite(nouveau.prenom,100,1,fb); fwrite(&nouveau.age,sizeof(int),1,fb); fclose(fb); } void Afficher(int *nb){ FILE *fb; int i; Personne nouveau; if(NULL ==(fb=fopen("personne.dat","rb"))) exit(EXIT_FAILURE); fread(nb,sizeof(int),1,fb); printf("Il y a %d enregistrements\n",*nb); for(i=0;i<*nb;++i){ fread(nouveau.nom,100,1,fb); fread(nouveau.prenom,100,1,fb); fread(&nouveau.age,sizeof(int),1,fb); printf("%d. Nom : %s, Prénom : %s , Age : %d\n", i+1,nouveau.nom,nouveau.prenom, nouveau.age); } fclose(fb); } -
voici l'exécution
lami20j@debserv:~/trash/c_exercices$ ./a.out --- Ajouter une nouvelle personne --- Nom : AAA Prenom : aaa Age : 10 Voulez vous continuer o/n ? o --- Ajouter une nouvelle personne --- Nom : BBB Prenom : bbb Age : 20 Voulez vous continuer o/n ? o --- Ajouter une nouvelle personne --- Nom : CCC Prenom : ccc Age : 30 Voulez vous continuer o/n ? n Il y a 3 enregistrements 1. Nom : AAA, Prénom : aaa , Age : 10 2. Nom : BBB, Prénom : bbb , Age : 20 3. Nom : CCC, Prénom : ccc , Age : 30 lami20j@debserv:~/trash/c_exercices$
-
merci pour ce code,
le nom du fichier c'est 'personne'?et ce code repond a quellle partie de l'exo?
si je px avoir votre msn pour discuter de la solution ca serait bien
merci -
le nom de fichier est personne.dat
le code traite
*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
le nombre d'enregistrement je l'affiche avec la fonction d'affichage -
ya -t-il la commande pour le nombre entier a lentete? qui n'est pas bien sur le nombre d'enregistrements,c'est un nombre entier quelquonque .
-
un nombre entier quelconque ne sers à rien
donc le nombre entier sera le nombre des enregistrements
à chaque nouveau enregistrement le numéro sera incrément, ce que je trouve assez logique
comme ça tu ne sera pas obliger de compter à chaque fois que tu veux le nombre d'enregistrements
et voici une fonction pour le nombre d'enregistrements qui en fait lit le nombre entier en entête de fichier
int NombreEnregistrements(){ FILE *fb; int nb; if(NULL == (fb = fopen("personne.dat","rb"))) return -1; fread(&nb,sizeof(int),1,fb); fclose(fb); return nb; }
-
pour
*une fonction qui affiche en cas d'erreue dans un appel systeme le numéro et le message correspondant à l'erreur .
tu dois utiliser perror -
Normalement, si ton code ne fait pas appel à des librairies disponibles que sous Windows, que tu sois sous Linux ou sous Windows ne change strictement rien : le C, c'est du C !
-
voici l'enoncé complet de l'exo:
Bonjour,voulez vous maider ds cet exo svp
exo:
on desire traiter des fichiers linux ayant la structure suivante:
-une zone d'entete qui consiste en un entier de votre choix
-une suite d'objets ayant la structure suivante:-nom
-prenom
-age
les operations a realiser sur de tels fichiers sont:
*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui donne la valeur du i=eme enregistrement.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
*une fonction qui modifie le i=eme enregistrement .
*une fonction qui affiche en cas d'erreue dans un appel systeme le numéro et le message correspondant à l'erreur .
-écrire en c++(c) les classes (les structures) nécessaires .
-ajouter une fonction Main ,cette fonction affiche un menu afin de permettre à l’utilisateur d’exécuter des opérations sur les fichiers précédants .
merci d'avance de m’avoir aidé! -
'et voici une fonction pour le nombre d'enregistrements qui en fait lit le nombre entier en entête de fichier '
explique moi cette phrase,est elle demandée ds l'exo?
- 1
- 2