Programmation c sous linux
salahprince
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
chris79 Messages postés 97 Date d'inscription Statut Membre Dernière intervention -
chris79 Messages postés 97 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
..Aidez moi SVP!!!!!!!!!!!
J'ai écrit un prgrm pour exécution 4 processus on parallèle sous linux (c) mais Il ya une erreur svp aidez moi pour Correction de l'erreur .....
le prgrm est :
EDIT: Ajout de la coloration syntaxique.
..Aidez moi SVP!!!!!!!!!!!
J'ai écrit un prgrm pour exécution 4 processus on parallèle sous linux (c) mais Il ya une erreur svp aidez moi pour Correction de l'erreur .....
le prgrm est :
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int n,m,k; printf("n = " ); scanf("%d",&n); printf("m = " ); scanf("%d",&m); printf("k = " ); scanf("%d",&k); int a[n][m]; int b[m][k]; int w[n][k]; int c[n]; int d[m]; int i,j,h; int s,q ; int pid , pid1,pid2,pid3; q=0; //entre de la prossuse pid; pid = fork(); if(pid==-1) { printf("Can't fork\n"); } if(pid==0) //entre de la valzur a; { for(i =0; i< n;i++) { for(j = 0;j < m;j++) { printf("\ta[%d][%d]= ",i,j); scanf("%d",&a[i][j]); printf("\n"); } } //entre de la vqleur b; printf("\n"); for(i =0; i< m;i++) { for(j = 0;j < k;j++) { printf("\tb[%d][%d]= ",i,j); scanf("%d",&b[i][j]); printf("\n"); } } q=1; wait(pid1);wait(pid2);wait(pid3); //afiche de la valzur a; printf("\n"); for(i =0; i< n;i++) { for(j = 0;j < m;j++) { printf("\n a[%d][%d]=%d",i,j,a[i][j]); printf("\n"); printf("\n d[%d]=%d",i,d[i]); printf("\n"); } printf("\n c[%d]=%d",i,c[i]); printf("\n"); } //afiche de la valzur b; printf("\n"); for(i =0; i< m;i++) { for(j = 0;j < k;j++) { printf("\n b[%d][%d]=%d",i,j,b[i][j]); printf("\n"); } } //afiche de la valzur w; printf("\n"); for(i =0; i< n;i++) { for(j = 0;j < k;j++) { printf("\n w[%d][%d]=%d",i,j,w[i][j]); printf("\n"); } } } //fin la prossuse pid; if(q==1) { //entre de la prossuse pid1; pid1 = fork() ; if (pid1 == -1) { printf("Can't fork\n"); } if (pid1==0) { for(i = 0; i < n;i++ ) { for(h = 0; h < k;h++ ) { s=0; for(j = 0; j < m;j++ ) { s=s+a[i][j]*b[j][h]; } w[i][h]=s; } } } //fin la prossuse pid1; //entre de la prossuse pid2.; pid2 = fork() ; if (pid2 == -1) { printf("Can't fork\n"); } if (pid2==0) { wait(pid1); s=0; for(i =0; i< n;i++) { for(j = 0;j < k;j++) { s=s+w[i][j]; } c[i]=s; s=0; } } printf("\n"); //fin la prossuse pid2; //enter de la prossuse pid3; pid2 = fork() ; if (pid2 == -1) { printf("Can't fork\n"); } if (pid2==0) { wait(pid1); s=0;i=0;j=0; while( i < k ) { s=s+w[j][i]; j++; if(j = n -1) { d[i]=s; printf("\n"); i++; j=0; s=0; } } //fin la prossuse pid2; system("PAUSE"); return 0; }
EDIT: Ajout de la coloration syntaxique.
A voir également:
- Programmation c sous linux
- Linux reader - Télécharger - Stockage
- Application de programmation - Guide
- Toutou linux - Télécharger - Systèmes d'exploitation
- Backtrack linux - Télécharger - Sécurité
- R-linux - Télécharger - Sauvegarde
1 réponse
Slt,
Si ton programme ne compile pas, c'est lié aux raisons suivantes :
- tu utilises mal la fonction wait(). Pour info son prototype est le suivant :
--> cette fonction bloque le processus jusqu'à ce qu'un des processus fils se termine. Elle renvoie ensuite le pid du fils terminé. La variable status indique les circonstances de fin de processus du fils...
Toi tu veux attendre un fils spécifique, tu dois donc utiliser la fonction dédiée :
Soit par exemple :
Au passage, pid1 et autres sont de type pid_t et non int. Il faut veiller à respecter l'API définie surtout que int a une taille qui dépend de la machine ...
- Autre erreur, tu écris :
au lieu de :
C'est vicieux car ça doit certainement compiler mais ne teste pas la valeur de j mais lui assigne n-1....bref une sale histoire.
--> Une bonne habitude à prendre est de placer la variable que tu testes à droite de l'opérateur :
Après j'ai pas regardé ce que faisait ton prog dans le détail....il faut vraiment prendre l'habitude de nommer les variables par ce qu'elles représentent...."a" ou "b" ça ne veut pas dire grand chose....
Bonne chance ^^
Si ton programme ne compile pas, c'est lié aux raisons suivantes :
- tu utilises mal la fonction wait(). Pour info son prototype est le suivant :
pid_t wait (int * status)
--> cette fonction bloque le processus jusqu'à ce qu'un des processus fils se termine. Elle renvoie ensuite le pid du fils terminé. La variable status indique les circonstances de fin de processus du fils...
Toi tu veux attendre un fils spécifique, tu dois donc utiliser la fonction dédiée :
pid_t waitpid (pid_t pid, int * status, int options)
Soit par exemple :
waitpid(pid1,NULL,0);
Au passage, pid1 et autres sont de type pid_t et non int. Il faut veiller à respecter l'API définie surtout que int a une taille qui dépend de la machine ...
- Autre erreur, tu écris :
if(j = n -1)
au lieu de :
if(j == n -1)
C'est vicieux car ça doit certainement compiler mais ne teste pas la valeur de j mais lui assigne n-1....bref une sale histoire.
--> Une bonne habitude à prendre est de placer la variable que tu testes à droite de l'opérateur :
if ( j = MACONSTANTE) {} // ne génère pas d'erreur...vicieux ! if (MACONSTANTE = j) {} // génère une erreur dc on évite un debug futur ;)
Après j'ai pas regardé ce que faisait ton prog dans le détail....il faut vraiment prendre l'habitude de nommer les variables par ce qu'elles représentent...."a" ou "b" ça ne veut pas dire grand chose....
Bonne chance ^^