首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

fork 父过程动态刷新,子进程做操作反馈给服务器,不能实现,求指教

2012-09-10 
fork 父进程动态刷新,子进程做操作反馈给服务器,不能实现,求指教pid fork()if( pid 0 ){perror( for

fork 父进程动态刷新,子进程做操作反馈给服务器,不能实现,求指教
pid = fork();
  if( pid < 0 )
  {
  perror( "fork error.\n" );
exit( EXIT_FAILURE );
  }
  if( pid > 0) //父进程实现动态刷新在线好友,从服务器端接收
  {
  //while( 1 )
{
  nbytes = recv( sockfd, online_buff, sizeof(online_buff), 0 );
if( nbytes < 0 )
{
fprintf( stderr, "接收数据错误..%s\n", strerror(errno) );
//continue;
}
else
{
  printf( "%s\n", online_buff );
if( nbytes != nbytes_temp )
{
nbytes_temp = nbytes;
  online_buff[nbytes] = '\0';
  printf( "%s\n", online_buff );
}
}
//sleep( 5 );
}/*end while 1*/
waitpid( pid, NULL, 0 );
  }
  if( pid == 0 )
  {
  printf( "子进程:\n" );
scanf( "%d", &choice2 );
printf( "%d\n", choice2 );
  }

1.首先感谢看这个帖子的人,第一次发帖子。我在学linux的网络编程,现在做的是聊天室
2.本程序部分代码已经贴出,我想实现父进程不断的读从服务器发来的消息,当有人上线的时候,服务器会发来消息,并动态
  更新在线的人
问题:
  1.不用while( 1 )的时候,不会产生阻塞,但是当另外的人登录聊天室,则不会收到更新的消息
  2.用while( 1 ) 能更新在线消息,但是会阻塞在那里。
  3.请指点一下,怎么个该法?或者其他的思路也可以,目的只有一个,简单的说就是父进程不断的读,当读到的在线人数
  与当前不一样就刷新, 子进程做相应的选择聊天处理
求大神!小弟刚毕业...

[解决办法]

C/C++ code
pid = fork();if( pid < 0 ){    perror( "fork error.\n" );    exit( EXIT_FAILURE );}if( pid > 0) //父进程实现动态刷新在线好友,从服务器端接收{    while( 1 )    {        select(sockfd + 1, &r_set, NULL, NULL, NULL);  //这里应该判断select的返回值,我没有写        if (FD_ISSET(sockfd, &r_set))        {            //可读            nbytes = recv( sockfd, online_buff, sizeof(online_buff), 0 );            if( nbytes < 0 )            {                fprintf( stderr, "接收数据错误..%s\n", strerror(errno) );                //continue;            }            else            {                printf( "%s\n", online_buff );                if( nbytes != nbytes_temp )                {                    nbytes_temp = nbytes;                    online_buff[nbytes] = '\0';                    printf( "%s\n", online_buff );                }            }        }        //sleep( 5 );    }/*end while 1*/    waitpid( pid, NULL, 0 );}if( pid == 0 ){    printf( "子进程:\n" );    scanf( "%d", &choice2 );    printf( "%d\n", choice2 );} 

热点排行