[script sh] boucle for
pom
-
regim-fatma-damak -
regim-fatma-damak -
Bonjour, je ne comprends pas pourquoi le script suivant ne marche pas (sachant qu'il marche très bien si remplace la ligne
for N in $(seq 1020 20 1300)
par la ligne
for N in $(seq 900 20 1000)
for N in $(seq 1020 20 1300)
par la ligne
for N in $(seq 900 20 1000)
#!/bin/sh for N in $(seq 1020 20 1300) do ret=1 while [ $ret != 0 ] do rm -f out make echo "N = $N" echo echo "Elapsed time :" time -p ./out input.txt $N echo ret=$? if [ $ret != 0 ] then echo echo "ERROR : exit program and new run" echo fi done if [ ! -d ../Outputs ] # si le repertoire ../Outputs n'existe pas on le cree then mkdir ../Outputs fi if [ $N -le 9 ] then newdir=Part000$N elif [ $N -le 99 ] then newdir=Part00$N elif [ $N -le 999 ] then newdir=Part0$N else newdir=Part$N fi mkdir $newdir mv Mean.txt $newdir mv RandomInitialConditions.txt $newdir cp input.txt $newdir cp system.txt $newdir cp therm.txt $newdir rm -f Particle* rm -f Volumes.txt tar -cvzf $newdir.tar.gz $newdir mv $newdir.tar.gz ../Outputs rm -rf $newdir done
A voir également:
- [script sh] boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Idm for mac - Télécharger - Téléchargement & Transfert
4 réponses
J'ai oublié, le message d'erreur est :
/home/pomme/bin/runprgmdloop1020_20_1300.sh: line 3: 24765 Erreur de segmentation ./out input.txt $N
/home/pomme/bin/runprgmdloop1020_20_1300.sh: line 3: 24765 Erreur de segmentation ./out input.txt $N
Ben oui... il marche très bien si je fais ma boucle pour N allant de 900 jusqu'à 1000. Pourquoi ne marcherait-il pas pour 1020 jusqu'à 1300 ?
Comment puis-je savoir si mon make s'est correctement effectué ?
Pour le cas ou, voici mon Makefile
Comment puis-je savoir si mon make s'est correctement effectué ?
Pour le cas ou, voici mon Makefile
# compilateur utilise CC=gcc #CPP pour le C++ et CC pour le C CFLAGS=-Wall -W -O2 LDFLAGS=-Wall -O2 -lm -static #LDFLAGS=-O3 -axW -ipo -mp1 -lm -static # on inclut tous les headers INCLUDE_DIR1=../include/includeCVode INCLUDE_DIR2=../include/myinclude # EXEC contient le nom des executables a generer. EXEC=out # Fichiers sources SRC= $(wildcard ../source/sourceCVode/*.c) $(wildcard ../source/mysource/*.c) main.c # Fichiers objets le .c est remplace par un .o OBJ=$(SRC:.c=.o) # Regles de compilation: all: $(EXEC) $(EXEC): $(OBJ) @$(CC) -o $@ $^ $(LDFLAGS) # Creation des .o a partir des .c qui se verront appeles par defaut. %.o: %.c @$(CC) -o $@ -c $< -I$(INCLUDE_DIR1) -I$(INCLUDE_DIR2) $(CFLAGS) clean: @rm -rfv $(EXEC) $(OBJ) *~
Je pense que ca plante lors de l'execution de la ligne :
Ton script ni ton makefile ne sont en cause à priori. Je pencherais plutot pour ton executable généré par la commande make.
En fait je pense que le nombre que tu transmet à ton executable est trop gros. Regarde dans les sources de ton programme !
time -p ./out input.txt $N
Ton script ni ton makefile ne sont en cause à priori. Je pencherais plutot pour ton executable généré par la commande make.
En fait je pense que le nombre que tu transmet à ton executable est trop gros. Regarde dans les sources de ton programme !
Salut, j'ai N domaines et je résoud une équation sur chaque domaine. Je stocke la solution dans un fichier texte. J'ai donc N fichiers de sorties (donc j'ai fait N fopen()). Mais je fais aussi trois autres fopen() où je stocke d'autre choses. Donc je fait N+3 fopen au total. Alors si N est petit ça va, mais si N est grand... mon prgm plante ! Y a-t-il une solution pour éviter ce plantage (en évitant de tout stocker dans un énorme fichier) ?
Merci en tout cas de ta patience.
Merci en tout cas de ta patience.
Il n'est pas raisonnable d'ouvrir autant de fichiers en même temps.
En générale dans la programmation on essaie de ne pas ouvrir trop de fichiers en même temps.
Donc je conseillerais de revoir la structure de ton programme pour ouvrir tes fichiers l'un après l'autre. Personnellement, j'évite d'ouvrir en même temps plus de 4-5 fichiers simultanément.
Dans ton cas je ne pense pas que tu fasses tes N traitements sur tes domaines en même temps. Donc ouvre tes fichiers un par un (sans oublier des les fermer !). Ton programme n'en sera que plus clair et plus performant.
De plus les OS limites en général le nombre de fichiers pouvants être ouverts simultanément.
Voila.
En générale dans la programmation on essaie de ne pas ouvrir trop de fichiers en même temps.
Donc je conseillerais de revoir la structure de ton programme pour ouvrir tes fichiers l'un après l'autre. Personnellement, j'évite d'ouvrir en même temps plus de 4-5 fichiers simultanément.
Dans ton cas je ne pense pas que tu fasses tes N traitements sur tes domaines en même temps. Donc ouvre tes fichiers un par un (sans oublier des les fermer !). Ton programme n'en sera que plus clair et plus performant.
De plus les OS limites en général le nombre de fichiers pouvants être ouverts simultanément.
Voila.