编程札记
看下面的程序你是否会发现错误?如果没有发现那么说明你也会犯同样的错误!!!
while (1) //循环读取数据
{
fprintf( stdout,"epoll wait...\n");
int nfds = epoll_wait( epollfd, events, 2, -1 );
for( i=0; i< nfds; i++ )
{
if( events[i].data.fd == fd )
if( (nread = read(fd, buff, 255 )) > 0 )
{
fprintf( stdout,"dug com receive data!\n");
fprintf( stdout,"len = %d\ndata :",nread);
for(j=0;j<nread;j++) fprintf(stdout,"%02x ",buff[j]);
fprintf(stdout,"\n" );
write( fd2 , buff ,nread );
}
else if( events[i].data.fd == fd2 )
if( (nread = read(fd2, buff,255)) > 0 )
{
fprintf( stdout,"down com receive data!\n");
fprintf( stdout,"len = %d\ndata :",nread);
for(j=0;j<nread;j++) fprintf(stdout,"%02x ",buff[j]);
fprintf(stdout,"\n" );
write( fd, buff, nread );
}
}
}
上例中,本意是 events[i].data.fd == fd 时执行if( (nread = read(fd, buff, 255 )) > 0 );
而当 events[i].data.fd == fd2 时执行if( (nread = read(fd2, buff,255)) > 0 );
但是因为
if( events[i].data.fd == fd )
if( (nread = read(fd, buff, 255 )) > 0 )
{
。。。。
}
这个语句块缺失一对{},所以,在逻辑上偏离的程序的原意,变成了如下逻辑:
if( events[i].data.fd == fd )
{
if( (nread = read(fd, buff, 255 )) > 0 )
{
。。。。
}
else if( events[i].data.fd == fd2 )
{
if( (nread = read(fd2, buff,255)) > 0 )
{
。。。。
}
}
}
这个错误相当隐蔽,所以,在编程中一定不要偷懒而少加{},不然往往浪费大量的时间才能找到这类错误。
整个程序正确的写法如下:
while (1) //循环读取数据
{
fprintf( stdout,"epoll wait...\n");
int nfds = epoll_wait( epollfd, events, 2, -1 );
for( i=0; i< nfds; i++ )
{
if( events[i].data.fd == fd )
{
if( (nread = read(fd, buff, 255 )) > 0 )
{
fprintf( stdout,"dug com receive data!\n");
fprintf( stdout,"len = %d\ndata :",nread);
for(j=0;j<nread;j++) fprintf(stdout,"%02x ",buff[j]);
fprintf(stdout,"\n" );
write( fd2 , buff ,nread );
}
}
else if( events[i].data.fd == fd2 )
{
if( (nread = read(fd2, buff,255)) > 0 )
{
fprintf( stdout,"down com receive data!\n");
fprintf( stdout,"len = %d\ndata :",nread);
for(j=0;j<nread;j++) fprintf(stdout,"%02x ",buff[j]);
fprintf(stdout,"\n" );
write( fd, buff, nread );
}
}
}
}

浙公网安备 33010602011771号