IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

MPI shell lecture/ecriture fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut MPI shell lecture/ecriture fichier
    Bonjour,

    Je travail avec un code en c qui simule une vague. Le fichier all-out2.dat correspond aux coordonnées (x,y) de ma vague. Ce fichier est correct.
    Je travail en utilisant MPI car c'est des calculs qui peuvent prendre pas mal de temps.
    Le problème vient du fait que le fichier ligne et lignes ont des valeurs fausses ...
    Pourtant mon code shell me paraît bon ?
    J'ai changer à la main l'extension des fichiers après avoir fait tourner le code car je ne pouvais pas ouvrir du .dat avec le site.
    Si quelqu'un à une idée svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    	char names[80];
    	double Xmax = 0., Ymax = 0.;
    	sprintf(names, "outt%d", pid());
    	FILE * fout = fopen (names, "w");
    	output_facets (f,fout);
    	fclose(fout);
    	system("cat outt* > all-out.dat");
    	if(pid() == 0.){
    		system("awk -F ' ' '{ if ($2 >= 1.5) {print ''} else {print $0} }' all-out.dat > all-out2.dat"); // fichier contenant (x,y)
    		system("(cut -f2 all-out2.dat | sort -n -r | head -1) >ligne"); // Je selectionne (x,ymax) dans le fichier all-out2.dat puis jecrit le résultat dans ligne.
    		system("cat ligne >> lignes"); // je fais une copie du fichier ligne dans lignes
    		FILE * fligne = fopen("ligne", "r");
    		rewind(fligne);
    		fscanf(fligne,"%lf %lf", &Xmax, &Ymax);
    		fclose(fligne);
    	}
    	//fprintf(gnuplotPipe, "refresh\n");
    	fprintf (gnuplotPipe, "set output 'plot%d.png'\n", frame);
    	fprintf (gnuplotPipe, "set title 't = %g, Xmax = %lf, Ymax =%lf' font ',25'\n",t, Xmax, Ymax);
    	fprintf (gnuplotPipe, "plot 'all-out2.dat' u 1:2 w l lt rgb'#11BB11' t 'interface',""'lignes' u 1:2 w l t 'Position max crête'\n");
    	fflush (gnuplotPipe);
    	frame++;
    }
     
    event stop (t = EndTime){
      system("ffmpeg -r 25 -f image2 -i plot%d.png -c:v libx264 -vf format=yuv420p -y mov.mp4 && "
    	 "rm -f plot* lignes ligne");
      return 1;
    }
    Je vous en remercie !
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 670
    Par défaut
    Bonjour,

    ça cat outt* > all-out.dat | awk -F c'est faux.
    tu ne peux pas rediriger le contenu de fichiers vers un autre fichier ET le passer par un pipe à une commande.

    mais, avec autant de shell dans ton code C, tu ne ferais pas mieux d'écrire un script shell ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut
    Bonjour,

    Pardon j'aurais du enlever cette ligne qui est de toute façon commenté dans le code.
    Le problème ne vient pas de ça.
    Et bien j'ai hésité entre écrire en code en c pour trier mes valeurs et faire une sélection ou faire vite fait du shell.
    J'ai choisi le shell car cette opération est plus courte et rapide en shell.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 670
    Par défaut
    quand je disais écrire un script shell, je voulais dire TOUT faire dans un shell script, et appeler ce script depuis le code C si le C est indispensable, parce que gnuplot existe en ligne de commande, finalement tu exécutes ffmpeg.

    je ne programme pas du tout en C.
    de mon point de vue non initié, donc, ton code C ressemble à simple wrapper.
    et alors, le C est-il indispensable ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Oui, il me semble aussi que le C ne sert pas à grand chose ici.
    Sinon, je pense que ton problème vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -f2 all-out2.dat | sort -n -r | head -1
    Ça serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=C sort -nrk2 all-out2.dat | head -1

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut
    Oui le c est indispensable et le soucis c'est que je suis pas bon en shell. A mon avis je vais tout faire en c si je ne trouve pas la solution.
    Je dois rendre mon travail pour la semaine prochaine. Malheureusement je n'ai pas énormement de temps devant moi pour m'investir dans un script shell et un wrapper.
    Je vous ai montré qu'une partie du code en c et j'utilise plein de fonction qui sont codées en c.

    A quoi correspond LC_ALL = C ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=C sort -nrk2 all-out2.dat | head -1

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut
    OUI ça marche !!!!
    tu es un génie !
    Du coup pourquoi mon shell ne fonctionnait pas ?
    Je me coucherais moins bête.
    MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PL/SQL lecture/ecriture fichier txt
    Par stos dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/05/2006, 12h19
  2. [lecture/ecriture] fichier excel
    Par ethno dans le forum C
    Réponses: 4
    Dernier message: 14/04/2006, 19h47
  3. php: lecture ecriture fichier
    Par kda007 dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2006, 18h49
  4. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22
  5. [LG]Lecture-ecriture fichier
    Par arno15 dans le forum Langage
    Réponses: 19
    Dernier message: 03/02/2005, 22h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo