首页 > 解决方案 > 带有管道到文件的 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);

我应该怎么办?

标签: clinux

解决方案


您可以使用 强制刷新fflush,下面是一个最小的工作示例:

#include <stdio.h>
#include <unistd.h>

int main() {
    for (;;) {
        printf("Hey\n");
        fflush(stdout);
        sleep(1);
    }
    return 0;
}

推荐阅读