Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-11-2007, 08:52   #1
maradona86
Member
 
Iscritto dal: Jan 2007
Messaggi: 39
[c]non mi vengono gli es qualcuno mi da una mano please??

Quote:
#include <stdio.h>



main()
{int fdes1[2];int fdes2[2];
int pid;
int i=1;
int j=1;
char buffer1[5];
char buffer2[6];
pipe(fdes1); /*creating first pipe*/
pipe(fdes2); /* second pipe */

pid = fork();

if (pid==0){ /*child */
close(fdes1[1]);
close(fdes2[0]);

while(i!=0){
i=read(fdes1[0], buffer1,5);
printf("%d characters received by child= ",i);
buffer1[i]='\0';
printf("%s\n",buffer1);
}
close(fdes1[0]);

sleep(1);

write(fdes2[1],"Ciao, Papa!",sizeof("Ciao, Papa!"));





}

if (pid!=0) { /* in parent */
close(fdes1[0]);
close(fdes2[1]);
write(fdes1[1],"Ciao, Bambino!",sizeof("Ciao, Bambino!"));
close(fdes1[1]);


while(j!=0){
j=read(fdes2[0], buffer2,6);
printf("%d characters received by father= ",j);
buffer2[j]='\0';
printf("%s\n",buffer2);
}



}
}
questo è il mio codice che avevo implementato a lezione..come potrei fare a creare 3 processi figli P1,P2,P3 e pipes tra processi in modo che P1 scrive un messaggio a P2 che lo passa a P3 che lo ripassa a P1 e cosi via e Ogni volta che P1 riceve il messaggio lo cambia ??
maradona86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2007, 09:40   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Vedo che non ti sei impegnato molto con l'indentazione
Indentalo ed avrai più risposte...compresa la mia
Inseriscilo nel tag {CODE}{/CODE} con le parente quadre al posto delle graffe.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2007, 17:59   #3
maradona86
Member
 
Iscritto dal: Jan 2007
Messaggi: 39
Codice:
#include <stdio.h>



main()
{int fdes1[2];int fdes2[2];
int pid;
int i=1;
int j=1;
char buffer1[5];
char buffer2[6];
pipe(fdes1); /*creating first pipe*/
pipe(fdes2); /* second pipe */

pid = fork();

if (pid==0){ /*child */
close(fdes1[1]);
close(fdes2[0]);

while(i!=0){
i=read(fdes1[0], buffer1,5);
printf("%d characters received by child= ",i);
buffer1[i]='\0';
printf("%s\n",buffer1);
}
close(fdes1[0]);

sleep(1);

write(fdes2[1],"Ciao, Papa!",sizeof("Ciao, Papa!"));





}

if (pid!=0) { /* in parent */
close(fdes1[0]);
close(fdes2[1]);
write(fdes1[1],"Ciao, Bambino!",sizeof("Ciao, Bambino!"));
close(fdes1[1]);


while(j!=0){
j=read(fdes2[0], buffer2,6);
printf("%d characters received by father= ",j);
buffer2[j]='\0';
printf("%s\n",buffer2);
}



}
}
ok so che facendo il fork creo processi identici ma non so bene come farlo...
scusate per prima
ciauz a tutti buona serata
maradona86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-11-2007, 19:15   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Questa è una indentazione

Codice:
#include <stdio.h>



main()
{
    int             fdes1[2];
    int             fdes2[2];
    int             pid;
    int             i = 1;
    int             j = 1;
    char            buffer1[5];
    char            buffer2[6];
    pipe(fdes1);		/* creating first pipe */
    pipe(fdes2);		/* second pipe */

    pid = fork();

    if (pid == 0) {		/* child */
	close(fdes1[1]);
	close(fdes2[0]);

	while (i != 0) {
	    i = read(fdes1[0], buffer1, 5);
	    printf("%d characters received by child= ", i);
	    buffer1[i] = '\0';
	    printf("%s\n", buffer1);
	}
	close(fdes1[0]);

	sleep(1);

	write(fdes2[1], "Ciao, Papa!", sizeof("Ciao, Papa!"));





    }

    if (pid != 0) {		/* in parent */
	close(fdes1[0]);
	close(fdes2[1]);
	write(fdes1[1], "Ciao, Bambino!", sizeof("Ciao, Bambino!"));
	close(fdes1[1]);


	while (j != 0) {
	    j = read(fdes2[0], buffer2, 6);
	    printf("%d characters received by father= ", j);
	    buffer2[j] = '\0';
	    printf("%s\n", buffer2);
	}



    }
}
Prima di tutto devi fare due firk se devi operare con 3 processi.
Il processo A deve condividere con il processo B una pipe.
Il processo B deve condividere con il processo C una pipe.
Quindi: A crea una pipe e fa la fork creando B. A chiude la pipe in ricezione, B quella in invio.
B crea una pipe e fa la fork creando C. C chiude la pipe in ricezione con A (resta aperta anche quella) e la pipe in invio verso B. B chiude quella in ricezione verso C.

A questo punto B non deve fare altro che inviare ogni carattere che riceve da A sulla pipe verso C.
A scrive sulla pipe e C legge.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2007, 14:23   #5
maradona86
Member
 
Iscritto dal: Jan 2007
Messaggi: 39
Codice:
#include <stdio.h>



 main()

{

int fdes [2]; 			                    // prima pipe

int fdes2[2];			                  // seconda pipe

int fdes3[2]; 			                 // terza pipe

int pid;  			                   // usato per fare fork

int pid2; 			                  // usato per fare fork

int pid3;  			                 // usato per fare fork

char buffer1[5]; 		             // buffer tra processi

char buffer2[6];		             // buffer tra processi

char buffer3[7];  		             // buffer tra processi

pipe(fdes); 			               // creazione prima pipe

pipe(fdes2);   		                      // creazione seconda pipe

pipe(fdes3); 			              // creazione terza pipe

char *messaggio = "sis"  	        // messaggio da inviare tra processi 
 
char singolo; 			           // singolo carattere

i = 0;

pid=fork(); 			          // processo A

if(pid != 0) 			          // sono nel padre

{ 

wait(); 			        // aspetto che A finisce
     
close(fdes[1]); 		    // chiudo in scrittura la prima pipe
     
for (i=0;singolo!='\0';i++)
  
{

singolo=read(fdes[0],1,sizeof(char)); 
 
buffer1[i]=singolo;     
 
}
     
open(fdes[1]); 			      // apro in scrittura fdes

pid2=fork(); 			       // genero il processo B

if(pid2 != 0)			       //  sono ancora nel padre
     
{ 

wait(); 			      // aspetto che B finisce
        
close(fdes2[1]); 		 // chiudo in scrittura fdes2

for(i=0;singolo!='\0';i++)
        
{

singolo=read(fdes2[0],1,sizeof(char)); 

buffer2[i]=singolo;     
     
}
 
open(fdes2[1]);                                   // riapro in scrittura BC
        
pid3=fork();                                        // genero il processo C
	
if(pid3 != 0)                                       // sono ancora nel padre
	 
{

wait();                                            // aspetto che il processo C finisca

close (fdes3[1]);                              // chiudo in scrittura CA
	  
for(i=0;singolo!='\0';i++)
           
{

singolo=read(fdes3[0],1,sizeof(char)); 
            
buffer3[i]=singolo;     
        
}
 
open(fdes3[1]);                               // riapro in scrittura CA

*messaggio=*messaggio+1;             // cambio il messaggio da spedire	  	

	 }

else                                         // sono nel processo C ora devo scrivere      
                                              //   nella pipeCA
 
{ 

write(fdes3[1],buffer3,sizeof(buffer3));	  

         }

      }

else                                      // sono nel processo B ora devo scrivere 
                                          // nella pipeBC

{ 

write(fdes2[1],buffer2,sizeof(buffer2));	  

      }
     
     
   }
  
else                                   //mi trovo nel processo A ora devo scrivere 
                                        //nella pipeAB

{

write(fdes[1],messaggio,sizeof(messaggio));	  

   }

}

mi scuso per l indentazione.
non riesco ancora a farlo funzionare.
dove sbaglio??
maradona86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2007, 14:32   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Uh? Eh? Cosa?
Codice:
for (i=0;singolo!='\0';i++)
{
  singolo=read(fdes[0],1,sizeof(char));
  buffer1[i]=singolo;
}
Dove punta 1? Cosa stai scrivendo in buffer1[i]?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2007, 14:51   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Se non sbaglio, visto che è un po' che non tocco le pipe...non le devi riaprire le pipe. Una volta creata è già aperta, devi solo chiudere quelle che non usi. Poi tra l'altro mancherebbero anche dei parametri alla open.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Desktop Remoto non funziona su Windows S...
Offerte Amazon del giorno: da AirPods 5 ...
Motorola anticipa la sua prossima mossa ...
La manovra di Picard di Star Trek funzio...
Sports FC 27, pubblicata su Spotify la s...
NSBProject misura quanto una startup &eg...
Instagram permette ora di aggiungere all...
Zuckoff scopre gli occhiali Meta attorno...
Samsung potrebbe lanciare i suoi primi o...
DLSS con Multi Frame Generation su RTX 2...
È questo il successore dei Fitbit...
Il nuovo Apple Watch ascolta le conversa...
Portatili in offerta su Amazon: MacBook ...
DeepSeek V4.1-Flash sostituisce il model...
Sciopero negli Apple Store italiani nel ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v