P
Piripiccio
Hello , please give me a little minute for this problem
the first thing ..... my english is very bad
I wrote a little program that using a socket pair with 2 process Padre
(Father) and Figlio (Son) but the
select see the future .
This is the code ... please help me before i become crazy .....
#include "my_posix.h"
int main(){
int ris,pid,sp[2],res=0;
ris=socketpair(AF_UNIX,SOCK_STREAM,0,sp);
if(ris){ printf("SP %d\n",ris); exit(2); }
pid=fork();
if(!pid) /*PADRE*/
{
res=8;
ris=write(sp[0],&res,sizeof res);
printf("Padre _scritto:%d in %dB\n",res,ris); fflush(stdout);
printf("Padre x Shut\n"); sleep(2); fflush(stdout);
shutdown(sp[0],SHUT_WR);
printf("Padre fatta Shut\n"); fflush(stdout); res=0;
ris=read(sp[0],&res, sizeof res);
printf("Padre letto %d in %dB\n",res,ris); fflush(stdout);
res=0;
ris=read(sp[0],&res, sizeof res);
printf("Padre letto %d in %dB\n",res,ris); fflush(stdout);
close(sp[0]);
printf("Padre fatta Close\n"); fflush(stdout);
}
else
{
fd_set fds;
FD_SET(sp[1],&fds);
res=select(100,&fds,0,0,0);
printf("Figlio fatta sel %d is set
%d\n",res,FD_ISSET(sp[1],&fds)); fflush(stdout);
ris=read(sp[1],&res, sizeof res);
printf("Figlio letto %d in %dB\n",res,ris); fflush(stdout);
res=select(100,&fds,0,0,0);
printf("Figlio fatta sel %d is set
%d\n",res,FD_ISSET(sp[1],&fds)); fflush(stdout);
res=0; ris=read(sp[1],&res, sizeof res);
printf("Figlio letto %d in %dB\n",res,ris); fflush(stdout);
res=5; sleep(1);
ris=write(sp[1],&res,sizeof res);
printf("Figlio x Shut _scritto:%dB\n",ris); fflush(stdout);
shutdown(sp[1],SHUT_WR);
printf("Figlio fatta Shut\n"); fflush(stdout);
close(sp[1]);
printf("Figlio fatta Close\n"); fflush(stdout);
}
printf("Uc: %u Sc: %d\n",(unsigned char)-5,(char)-130);
exit(-5);
}
The first select in the son (FIGLIO) returns -1 ...... WHY ? not 1
sleep in the PADRE code to prevent that process FIGLIO doesn't make
select .
THANKS A LOOOOOT
the first thing ..... my english is very bad
I wrote a little program that using a socket pair with 2 process Padre
(Father) and Figlio (Son) but the
select see the future .
This is the code ... please help me before i become crazy .....
#include "my_posix.h"
int main(){
int ris,pid,sp[2],res=0;
ris=socketpair(AF_UNIX,SOCK_STREAM,0,sp);
if(ris){ printf("SP %d\n",ris); exit(2); }
pid=fork();
if(!pid) /*PADRE*/
{
res=8;
ris=write(sp[0],&res,sizeof res);
printf("Padre _scritto:%d in %dB\n",res,ris); fflush(stdout);
printf("Padre x Shut\n"); sleep(2); fflush(stdout);
shutdown(sp[0],SHUT_WR);
printf("Padre fatta Shut\n"); fflush(stdout); res=0;
ris=read(sp[0],&res, sizeof res);
printf("Padre letto %d in %dB\n",res,ris); fflush(stdout);
res=0;
ris=read(sp[0],&res, sizeof res);
printf("Padre letto %d in %dB\n",res,ris); fflush(stdout);
close(sp[0]);
printf("Padre fatta Close\n"); fflush(stdout);
}
else
{
fd_set fds;
FD_SET(sp[1],&fds);
res=select(100,&fds,0,0,0);
printf("Figlio fatta sel %d is set
%d\n",res,FD_ISSET(sp[1],&fds)); fflush(stdout);
ris=read(sp[1],&res, sizeof res);
printf("Figlio letto %d in %dB\n",res,ris); fflush(stdout);
res=select(100,&fds,0,0,0);
printf("Figlio fatta sel %d is set
%d\n",res,FD_ISSET(sp[1],&fds)); fflush(stdout);
res=0; ris=read(sp[1],&res, sizeof res);
printf("Figlio letto %d in %dB\n",res,ris); fflush(stdout);
res=5; sleep(1);
ris=write(sp[1],&res,sizeof res);
printf("Figlio x Shut _scritto:%dB\n",ris); fflush(stdout);
shutdown(sp[1],SHUT_WR);
printf("Figlio fatta Shut\n"); fflush(stdout);
close(sp[1]);
printf("Figlio fatta Close\n"); fflush(stdout);
}
printf("Uc: %u Sc: %d\n",(unsigned char)-5,(char)-130);
exit(-5);
}
The first select in the son (FIGLIO) returns -1 ...... WHY ? not 1
sleep in the PADRE code to prevent that process FIGLIO doesn't make
select .
THANKS A LOOOOOT