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 );
}