实时输入/输出(类似聊天)

时间:2014-08-25 08:03:42

标签: c unix real-time

我正在尝试阅读Beej的编程指南之后做一个小聊天程序。

然后我在考虑程序本身的基础知识,我不知道如何打印recv()的输出并同时获取send()的输入,因为客户端总是可以写一些东西,发送,但是如何在他试图输入的同时打印一些东西呢?

我想到了线程,我对它们有了一些了解,我创建了两个简单的线程:第一个,每隔3秒打印一个句子,第二个得到输入,这个小程序当然有一个很多问题,例如如果你开始输入,而另一个线程需要打印一些东西,它只需要你写的东西,并用自己的输出打印。

这是代码,我试图重新创建它,我希望你们能帮助我......

pthread_t tid[2];

void* printse();
void* getinput();

int main(int argc, char *argv[])
{

    int error;
    error = pthread_create(&(tid[1]), NULL, &getinput, NULL);

    if(error != 0)
    {
        printf("ERROR\n");
    } else {
    printf("NOERROR\n");
    }

    error = pthread_create(&(tid[2]), NULL, &printse, NULL);

    if(error != 0)
    {
        printf("ERROR\n");
    } else {
        printf("NOERROR\n");
    }

    sleep(5000);

    return 0;
    }

void* printse()
{
    while(1)
    {
        printf("POTATO\n");
        sleep(3);
    } 
    return NULL;
}

void* getinput()
{
    char *input;
    while(scanf("%s", input) != EOF)
    {
        printf("-%s\n", input);

    }

    return NULL;
}

1 个答案:

答案 0 :(得分:1)

您的代码中有undefined behavior:您在input中没有未初始化的指针getinput

未初始化(非静态)局部变量具有不确定的值,并且它似乎是随机的。由于值是不确定的(并且看似随机),scanf调用将写入内存中的某个未知位置,覆盖那里的任何内容。

您可以通过将input设为数组来轻松解决此问题。