c - 带有管道到文件的 Echo 服务器
问题描述
我有一个简单的回显服务器和客户端更改为只向服务器发送一些文本。如果我使用
./client.o port < file.in
它可以工作并将文件内容发送到服务器,但是如果我尝试
./server.o port > file.out
启动服务器时,它不会做任何事情,既不会打印到终端,也不会打印到文件。如果在启动服务器进程时指定了接收到的文本,我希望能够将其写入文件。这是来自服务器代码的接收循环:
for(;;) {
int done, n;
printf("Waiting for a connection...\n");
t = sizeof(remote);
if ((s2 = accept(s, (struct sockaddr *) &remote, (socklen_t *) &t)) == -1) {
perror("accept");
exit(1);
}
printf("Connected.\n");
done = 0;
do {
n = recv(s2, str, 100, 0);
if (n <= 0) {
if (n < 0) perror("recv");
done = 1;
}
if (!done)
printf("%s\n", str);
} while (!done);
我应该怎么办?
解决方案
您可以使用 强制刷新fflush
,下面是一个最小的工作示例:
#include <stdio.h>
#include <unistd.h>
int main() {
for (;;) {
printf("Hey\n");
fflush(stdout);
sleep(1);
}
return 0;
}
推荐阅读
- python - 如何在 Python 中使用用户的输入调用方法
- reactjs - 一个功能组件内部可以有多个功能吗?
- excel - 将多个文件从不同文件夹复制到不同的目标文件夹
- reactjs - react.js 设置默认路由
- r - eval(substitute(x), data, parent.frame()) 中的错误:缺少参数“data”,没有默认值
- php - 如何显示和分组帖子?
- ios - 将 UIVisualEffectView 添加到 UIView 大小未知的部分
- jsp - javax.el.ELException:无法解析表达式 [${not empty short}]
- python - 在函数中将网格网格与矩阵乘法相结合的最佳方法
- git - 如何修改 Vivado 2018.3 生成的 tcl 脚本进行版本控制