fbpx
Skip to main content

LINUX AVANZATO 2007

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #52883 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Quindi non sono esclusive come la prova al calcolatore?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #52940 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007

Il programma da luogo durante l'esecuzione ad un processo padre e a 10 processi cloni che condividono lo spazio degli indirizzi del padre.
Il processo padre:
1-Crea 10 cloni

2-apre in scrittura 10 file "num-i" (0<=i<=9)

3-Esegue un ciclo di N iterazioni(N passato nella riga di comando).In ogni iterazione:
a)genera un numero casuale X
b)calcola il valore i (0<=i<=9) dell'ultima cifra decimale di X
c)inserisce il numero X nella componente i-esima del vettore num[10]
d)invia un segnale al clone i-esimo (clone incaricato di trattare numeri la cui ultima cifra decimale vale i)
e)aspetta un secondo

4-aspetta 5 secondi

5-elimina i 10 cloni

6-chiude i file e termina.

Ogni clone i (0<=i<=9) esegue un ciclo senza fine durante il quale:
a)aspetta un segnale dal padre
b)preleva il numero da num e lo scrive nel file "num-i" (aggiungo io è un file binario..)


Per verificare la correttezza:la somma delle dimensioni dei 10 file "num-i" deve essere pari a N*4





Il file deve essere binario nel senso che bisogna convertire il numero da decimale in binario prima di salvarlo nel file?

E poi la somma delle dimensioni pari a N*4, ma cosa? Bit o byte?
Se i numeri decimali sono casuali come si fa a sapere anticipatamente che una volta convertito in binario questo avrà un numero di digits multiplo di 4?

Io a volte questi programmi che dà bovet più li leggo e meno li capisco.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #52941 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Parlo di numero di digits supponendo che la dimensione da lui menzionata si misuri in bytes....

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #52942 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Tutto risolto, la stanchezza gioca brutti scherzi.

Evidentemente per utilizzo di un file binario intende il salvataggio del numero così com'è in memoria. Dunque basta fare una write con sizeof(int) come parametro count.

Tutto ok, la somma delle dimensioni è N*4 :D

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME Autore della discussione
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #52970 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007
Insomma,sta prova di Linux...che dice?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • COM_EASYSOCIAL_GUEST_NAME
  • Avatar di COM_EASYSOCIAL_GUEST_NAME
  • Visitatori
  • Visitatori
18 Anni 2 Mesi fa #52992 da COM_EASYSOCIAL_GUEST_NAME
Risposta da COM_EASYSOCIAL_GUEST_NAME al topic LINUX AVANZATO 2007

Il programma da luogo durante l'esecuzione ad un processo padre e a 10 processi cloni che condividono lo spazio degli indirizzi del padre.
Il processo padre:
1-Crea 10 cloni

2-apre in scrittura 10 file "num-i" (0<=i<=9)

3-Esegue un ciclo di N iterazioni(N passato nella riga di comando).In ogni iterazione:
a)genera un numero casuale X
b)calcola il valore i (0<=i<=9) dell'ultima cifra decimale di X
c)inserisce il numero X nella componente i-esima del vettore num[10]
d)invia un segnale al clone i-esimo (clone incaricato di trattare numeri la cui ultima cifra decimale vale i)
e)aspetta un secondo

4-aspetta 5 secondi

5-elimina i 10 cloni

6-chiude i file e termina.

Ogni clone i (0<=i<=9) esegue un ciclo senza fine durante il quale:
a)aspetta un segnale dal padre
b)preleva il numero da num e lo scrive nel file "num-i" (aggiungo io è un file binario..)


Per verificare la correttezza:la somma delle dimensioni dei 10 file "num-i" deve essere pari a N*4





Il file deve essere binario nel senso che bisogna convertire il numero da decimale in binario prima di salvarlo nel file?

E poi la somma delle dimensioni pari a N*4, ma cosa? Bit o byte?
Se i numeri decimali sono casuali come si fa a sapere anticipatamente che una volta convertito in binario questo avrà un numero di digits multiplo di 4?

Io a volte questi programmi che dà bovet più li leggo e meno li capisco.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <math.h>
#include <sched.h>
#include <signal.h>
#include <sys/types.h>
 #include <unistd.h>
int num[10],ind,fd[9];
	


void signal_handler(){
	printf("Signal\n");
	}

	int cloneFunz(){
		while(1){
			pause();
			printf("index clone %d\n",ind);
			
			char buf;
			if((read(fd[ind],&buf,1))<=0){
			write(fd[ind],&num[ind],4);}else{
				
			lseek(fd[ind],4,SEEK_CUR);			
			write(fd[ind],&num[ind],4);
				}
				}	
		return 0;
		}

int ultimaDecimale(int number){
	int app = number-10;
	if(app<10){return app;}
		else {ultimaDecimale(app);}
	
	
	}

	
	
int main(int argc,char **argv){
	int i;pid_t pid[9];int stack[10][1024];
	signal(SIGUSR1,signal_handler);
	char buff[1024];
	
	int N = atoi(argv[1]);	
	for(i=0;i<10;i++){
		sprintf(buff,"num-%d",i);
		printf("%s\n",buff);
		fd[i]=open(buff,O_RDWR|O_CREAT,0666);
		
		}

	
		
		for(i=0;i<10;i++){
		pid[i]=clone(cloneFunz,&stack[i][1023],CLONE_VM|CLONE_FILES,NULL);
		}
	
	
	for(i=0;i<N;i++){
		int randomNumber = rand()%100;
		ind = ultimaDecimale(randomNumber);
		num[ind]=randomNumber;
		kill(pid[ind],SIGUSR1);
		sleep(1);
		}
	return 0;
	
	
	}
	

Si prega Accedi o Crea un account a partecipare alla conversazione.