Difference between revisions of "ProvaPratica 2012.07.17"
Jump to navigation
Jump to search
(Created page with "<syntaxhighlight lang = "C"> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #define BUF_SIZE 20 int main(int argc, char** argv){ int ncopie, ...") |
|||
Line 8: | Line 8: | ||
int main(int argc, char** argv){ | int main(int argc, char** argv){ | ||
int ncopie, i, ris; | int ncopie, i, ris; | ||
− | |||
char command[BUF_SIZE]; | char command[BUF_SIZE]; | ||
− | if (argc | + | if (argc<3) {printf("inserisci due o più argomenti (ncopie, command)\n"); exit(1);} |
ncopie = atoi(argv[1]); | ncopie = atoi(argv[1]); | ||
strcpy(command, argv[2]); | strcpy(command, argv[2]); | ||
Line 17: | Line 16: | ||
} | } | ||
else { | else { | ||
− | char * | + | char *env_el; |
− | + | env_el = malloc(BUF_SIZE); | |
− | sprintf( | + | sprintf(env_el, "NCOPIA=%d", i); |
− | char *newenviron[] = { | + | //asprintf |
− | ris = execve( | + | //devo aggiungerci in fondo lo zero terminatore |
+ | char *newenviron[] = {env_el, (char*) 0}; | ||
+ | //argv+2 sono gli argomenti, ovvero tutti gli argomenti passati dopo il secondo | ||
+ | ris = execve(argv[2], argv+2, newenviron); | ||
if (ris == -1) {perror("execve"); exit(1);} | if (ris == -1) {perror("execve"); exit(1);} | ||
} | } | ||
− | |||
} | } | ||
− | wait(NULL); | + | for (i = 0; i<ncopie; i++) wait(NULL); |
return 1; | return 1; | ||
− | } | + | }</syntaxhighlight> |
− | </syntaxhighlight> | ||
Alessandro | Alessandro | ||
(In realtà non funziona bene, di fatto un processo fa quello che dovrebbe fare e gli altri danno bad address, se trovate l'errore correggetelo e scrivete qua sotto cosa avete cambiato e perché) | (In realtà non funziona bene, di fatto un processo fa quello che dovrebbe fare e gli altri danno bad address, se trovate l'errore correggetelo e scrivete qua sotto cosa avete cambiato e perché) |
Revision as of 15:06, 19 May 2014
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 20
int main(int argc, char** argv){
int ncopie, i, ris;
char command[BUF_SIZE];
if (argc<3) {printf("inserisci due o più argomenti (ncopie, command)\n"); exit(1);}
ncopie = atoi(argv[1]);
strcpy(command, argv[2]);
for (i = 0; i<ncopie; i++){
if(fork()){//processo padre
}
else {
char *env_el;
env_el = malloc(BUF_SIZE);
sprintf(env_el, "NCOPIA=%d", i);
//asprintf
//devo aggiungerci in fondo lo zero terminatore
char *newenviron[] = {env_el, (char*) 0};
//argv+2 sono gli argomenti, ovvero tutti gli argomenti passati dopo il secondo
ris = execve(argv[2], argv+2, newenviron);
if (ris == -1) {perror("execve"); exit(1);}
}
}
for (i = 0; i<ncopie; i++) wait(NULL);
return 1;
}
Alessandro (In realtà non funziona bene, di fatto un processo fa quello che dovrebbe fare e gli altri danno bad address, se trovate l'errore correggetelo e scrivete qua sotto cosa avete cambiato e perché)