c - 尝试从本地 HTTP 服务器写入文本文件
问题描述
我正在使用使用 C 脚本生成的本地服务器来简单地从客户端获取数据并将其写入文本文件。文本文件每次都是空白的。这可能是一些愚蠢的错误,但我似乎无法破解它,对不起,如果我的经验不足在这里显示得太多。以下是主要的,其余代码效果很好(打开服务器,接收/打印客户端数据到终端)。
while(1)
{
FILE *f = fopen("data.txt", "w");
if (f == NULL)
{
printf("Error opening file\n");
}
printf("\n+++++++ Waiting for new connection ++++++++\n\n");
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0)
{
perror("In accept");
exit(EXIT_FAILURE);
}
char buffer[30000] = {0};
valread = read( new_socket , buffer, 30000);
char str[256];
sprintf(str, "%ld", valread);
fputs(str,f);
fprintf(f,"\n");
fflush(f);
printf("%s\n",buffer );
write(new_socket , hello , strlen(hello));
close(new_socket);
fclose(f);
}
解决方案
大概您在服务器运行时正在查看文件,不是吗?
然后你的循环很可能是在等待被调用accept()
的客户端连接。在程序的这一点上,fopen("data.txt", "w")
如果文件不存在则文件被打开,如果文件存在则截断它。无论哪种情况,文件似乎都在那里,但为空。
要解决此问题,您有多种选择:
- 您在循环的每一圈创建一个新文件名。这样旧的内容就不会被新的内容覆盖。
- 返回后打开文件
accept()
。这样,文件将在短时间内被打开、写入和关闭,而不会被人察觉。
顺便说一句,你的构造:
char str[256];
sprintf(str, "%ld", valread);
fputs(str,f);
fprintf(f,"\n");
相当复杂。这更清晰,不需要用户提供的缓冲区:
fprintf(f, "%ld\n", valread);
推荐阅读
- javascript - 导出 JS 功能以在其他 JS 中使用不工作
- json - 在 URL 参数中传递用户名和密码 (Dart & Flutter)
- android-studio - Switch button Android : 使开关变小并去除填充物周围
- python - 在序列化程序 django rest 框架中使用非主键验证外键字段
- html - 如何在使用:active 类为 tanslateX() 属性设置动画时使按钮可点击?
- assembly - 如何在汇编8086中显示中断向量表?
- mysql - 在mysql中创建表时发生错误
- php - 我需要获取在 Opencart 3.0.2.0 for flat.php(shipping) 的购物车中添加的产品类别
- verilog - 使用变量值作为网络名称
- angular - 加载的图像没有在 Angular 中设置