C - 当我将函数 fwrite() 放入循环时写入文件失败

标签 c linux sockets fwrite

我想在 Linux 上通过 TCP 套接字接收文件。但我只是得到一个空文件。但是,当我删除第 1 行(while)时,一切都会好起来的。我在服务器上的代码如下所示:

while(1) 
{ 



  FILE *fp = fopen(file_name, "w"); 
  if(NULL == fp) 
  { 
    printf("File:\t%s Can Not Open To Write\n", file_name); 
    exit(1); 
  } 

  bzero(buffer, BUFFER_SIZE); 
  int length = 0; 
  while((length = recv(new_server_socket_fd, buffer, BUFFER_SIZE, 0)) > 0) 
  { 

    if(fwrite(buffer, sizeof(char), length, fp) < length) 
    { 
      printf("File:\t%s Write Failed\n", file_name); 
      break; 
    } 
    bzero(buffer, BUFFER_SIZE); 
} 

我可以确定的一件事是“if(fwrite(...))”确实执行了,因为我从 if() 中放了一个 putchar('a') 并且我可以在我的屏幕上得到一些“a” .所有数据都会通过socket new_server_socket_fd传输

最佳答案

在返回之前

fclose文件。

关于C - 当我将函数 fwrite() 放入循环时写入文件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39933971/

相关文章:

c - 使三角形(或通常为正方形)矩阵对称

c++ - 简单的程序无法编译

C - mcedit中的fprintf数组到txt文件

linux - CentOs分区顺序

linux - 如何运行一个 shell 来停止当前进程?

带有 SO_LINGER 的 close() 不会发送 RST

.net - 如何将 Visual Studio .NET 2003 项目生成信息转换为 VS 命令提示符?

linux - Serilog 在 Linux 上运行时不创建日志文件

c - 如何解决阻塞套接字(用于 SSL 握手)的 Connect() 超时问题?

c# - 我可以使用 C# 编写带 Socket 的蓝牙 PC 客户端吗?