如何“尝试”在C中读取输入

时间:2013-12-27 20:43:36

标签: c console chat

我正在编写一个程序,允许在Linux中的两个进程之间进行聊天。要传输消息,我使用IPC队列。

我遇到主循环问题:我需要检查队列中是否有新消息,如果有 - 打印它。然后我需要检查是否有任何输入,如果有 - scanf它(这是问题)。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用非阻止操作。如果对使用read()标记打开的文件描述符执行O_NONBLOCK,并且当时没有可用数据,read()将立即返回errno = -EWOULDBLOCK

另一种选择是使用select()来轮询多个描述符。

答案 1 :(得分:0)

为我的帖子添加更多价值我正在粘贴我找到的一个例子,它解决了我的问题

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
    fd_set rfds;
    struct timeval tv;
    int retval;

    /* Watch stdin (fd 0) to see when it has input. */
    FD_ZERO(&rfds);
    FD_SET(0, &rfds);

    /* Wait up to five seconds. */
    tv.tv_sec = 5;
    tv.tv_usec = 0;

    retval = select(1, &rfds, NULL, NULL, &tv);
    /* Don't rely on the value of tv now! */

    if (retval == −1)
        perror("select()");
    else if (retval)
        printf("Data is available now.\n");
        /* FD_ISSET(0, &rfds) will be true. */
    else
        printf("No data within five seconds.\n");

    exit(EXIT_SUCCESS);
}