IRC程序不打印最后一条消息

时间:2014-10-15 03:34:23

标签: c linux websocket irc berkeley-sockets

我有一个函数,它将以512字节的块从IRC服务器接收数据并将其打印到终端窗口,它是这样的:

int mainLoop(redchan_t *redchan)
{
    int socketDescriptor = redchan->socketDescriptor, i, bytesReceived;
    char workingBuffer[RECVBUFF] = {[0 ... RECVBUFF - 2] = '0', '\0'};

    puts("Recieving data...");

    do
    {
        if ((bytesReceived = recv(
                socketDescriptor,
                workingBuffer,
                RECVBUFF,
                0)) == 0)
            exit(EXIT_FAILURE);

        for (i = 0; i < bytesReceived; ++i)
            printf("%c", workingBuffer[i]);
    }
    while(1);

    return 0;
}

但是我想让它更正交,所以我把recv的调用取出来并把它放在它自己的例行程序中,如下所示:

int redchanRecv(redchan_t *redchan, int size, char *buffer)
{
    int totalBytes = 0, bytesReceived;

    while (totalBytes < size)
    {
        if ((bytesReceived = recv(
                        redchan->socketDescriptor,
                        buffer + totalBytes,
                        size - totalBytes,
                        0)) <= 0)
            cleanup_redchan(redchan, serverInfo);
        totalBytes += bytesReceived;
    }
    return 0;
}

然后我会在主循环的每次迭代中调用redchanRecv()然后打印缓冲区。 但是当我运行它时,几乎所有东西都打印出来,除了一行。 最后一行永远不会到达终端(它甚至会进入缓冲区吗?)。 我真的觉得自己犯了一个新手的错误,但是如果我能看到的话,那该死的。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

系统默认情况下

stdout是行缓冲的,添加fflush(stdout)来调用最后一行。