fwrite和fprintf在c中不起作用

时间:2012-05-15 12:20:46

标签: c linux unix file-io network-programming

我编写了一个程序,通过套接字从网络接收数据并将其写入文件。我已将以下代码用于此目的:

FILE *log;
log = fopen("time.log", "a"); 
fprintf(log,"HI all");
while(1)
{  
    sin_size = sizeof(struct sockaddr_in);
    connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
    printf("\n I got a connection from (%s , %d)", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
    fflush(stdout);           
    while(1)
    {       
        fflush(stdout);
        fgets(send_data,1000,stdin);
        send(connected, send_data,strlen(send_data), 0);
        bytes_recieved = recv(connected,recv_data,1024,0);
        recv_data[bytes_recieved] = '\0';
        char newln[2]="\n";
        int len=strlen(recv_data), len1=strlen(newln);
        fwrite(recv_data, len, 1, log);
        fwrite(newln, len1, 1, log);
        fflush(stdout);
    }
}   
fclose(log);

如果文件不存在,fopen会成功创建文件,但之后没有任何反应。没有数据写入文件。 neigther“HI all”也不是收到的数据。是的,正在接收数据,我通过打印接收的数据来检查它。请帮帮我。提前致谢。操作平台是linux。

1 个答案:

答案 0 :(得分:2)

首先,您应该检查fopen()的返回值,以确保log不是NULL。之后,您应该在fflush(log)之前使用fflush(stdout)

另外需要提及的是,你永远不会退出第二个while(1)循环,所以你也应该解决这个问题。

if (bytes_received == 0) {
    /* client closed the connection */
    close(connected);
    break;
}
recv_data[bytes_recieved] = '\0';
char newln[2]="\n";