|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Member
Iscritto dal: Jan 2007
Messaggi: 39
|
[c]non mi vengono gli es qualcuno mi da una mano please??
Quote:
|
|
|
|
|
|
|
#2 |
|
Senior Member
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. |
|
|
|
|
|
#3 |
|
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);
}
}
}
scusate per prima ciauz a tutti buona serata |
|
|
|
|
|
#4 |
|
Senior Member
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);
}
}
}
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. |
|
|
|
|
|
#5 |
|
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?? |
|
|
|
|
|
#6 |
|
Senior Member
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;
}
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#7 |
|
Senior Member
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.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:03.



















