c - fwrite 和 fprintf 不能在 c 中工作

标签 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 会成功创建文件,但之后什么也没有发生。没有数据写入文件。既不是“HI all”也不是接收到的数据。是的,正在接收数据,我通过打印接收到的数据来检查它。请帮帮我。提前致谢。运行平台为linux。

最佳答案

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

另一件需要提及的事情是,您将永远无法跳出第二个 while(1) 循环,因此您也应该修复此问题。

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

关于c - fwrite 和 fprintf 不能在 c 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10600522/

相关文章:

c - 开机时自动启动进程

c - 在 main 以外的函数内部无法识别结构

unix - 二进制和十进制之间的转换

unix - 检查符号链接(symbolic link)

svn - 如果您无权访问 svn 服务器,有没有办法移动 svn 存储库?

c - UART1_Write(13) 无法正常工作

c++ - 我们如何将一个 100 GB 的文件拆分成一百个 1 GB 的文件?

python - django urls.py 无法处理 url

c - 在哪里可以找到 C 调试器教程?

linux - 使用 bash 和 raspberry pi 3 从 USB 设备读取?