如代码注释信息所示,应该是缓冲区的问题,但是stderr是无缓冲区的,而且也使用了fflush函数,也没用。希望能有人指点指点,谢谢
#include "globle.h"
#define port 8082
int main( int argc, char *argv[] ){
fprintf(stderr, "11111111111\n");//无法打印
fflush(stdout);
int listenfd,sockfd, maxfd;
ssize_t nread, nwrite;
int nready = 0;
fd_set rset, allset;
clientList L = NULL;
struct sockaddr_in server_addr, client_addr;
socklen_t socklen = sizeof( server_addr );
char buf[ MAXBUF ];
listenfd = Socket( AF_INET, SOCK_STREAM, 0 );
bzero( &server_addr, socklen );
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons( port );
server_addr.sin_addr.s_addr = htonl( INADDR_ANY );
Bind( listenfd, ( struct sockaddr *)&server_addr, socklen );
Listen( listenfd, BACKLOG );
printf("############1\n");//无法打印
maxfd = listenfd;
FD_ZERO( &allset );
FD_SET( listenfd, &allset );
L = MakeEmpty( L );
printf("############2\n");//无法打印
fflush(stdout);
while(1){
rset = allset;
printf("!!!!!!!!!!!!!!!!!!!\n");
nready = Select( maxfd +1, &rset, NULL, NULL, NULL );
printf("@@@@@@@@@@@@@@@@@@@@\n");
if( ( FD_ISSET( listenfd, &rset ) ) > 0 ){
sockfd = Accept( listenfd, ( struct sockaddr *)&client_addr, &socklen );
append( L, sockfd );
FD_SET( sockfd, &allset );
if( --nread <= 0 )
continue;
}
clientPosition p = L;
clientPosition q = L;
while( p -> Next != NULL ){
printf("222222222\n");
if( ( FD_ISSET( p -> Next -> clientfd, &rset ) ) > 0 ){
printf("1111111111\n");
nread = Readn( p -> Next -> clientfd, buf, MAXBUF );
while( q -> Next != NULL ){
nwrite = Writen( p -> Next -> clientfd, buf, nread );
q = q -> Next;
}
nready--;
}
p = p -> Next;
if( nready <= 0 )
break;
}
}
L = MakeEmpty( L );
free( L );
return 1;
}
是不是你的错误信息管道被重定向了。
你只fflush()了stdout,没有fflush stderr。