Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
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


Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
Stop Killing Games: Ross Scott convince ...
Annunciata la tuta di volo di Vast che s...
Vast presenta il nuovo Large Docking Ada...
Una denuncia getta ombre sulle batterie ...
DJI Avata 2 Fly Smart Combo a 526€: il d...
Alla guida della nuova auto elettrica ci...
GeForce RTX 3060 12 GB a giugno di nuovo...
Apple Music sarà sponsor ufficiale di Po...
The Mandalorian & Grogu: trailer fin...
Fedeltà record: Apple blinda gli utenti,...
Volkswagen ID.3 Neo: fino a 630 km di au...
GPU-Z mette i dati personali a rischio? ...
La PS6 potrebbe essere retrocompatibile ...
Amazfit Cheetah 2 Pro arriva in Italia: ...
Duolingo ammette l'errore dopo un anno: ...
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: 08:03.


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