C(linux) - 模拟/跳过scanf输入

时间:2014-05-17 16:10:14

标签: c linux multithreading scanf

我有一个运行2个线程的程序。第一个是等待用户输入(使用scanf),第二个是通过udp套接字监听一些数据。我想模拟用户输入,以便每次我收到特定的udp数据包时使用第一个线程处理特定通知。我知道我可以在线程之间共享变量,所以我的问题是:我可以强制scanf从另一个线程获取输入吗?我可以跳过第一个帖子中的scanf吗?

2 个答案:

答案 0 :(得分:1)

我相信scanf()的定义是从stdin读取。但是,就像你说的那样,不同的线程共享内存,因此很容易在它们之间传递信息。也许有一些共享变量和某种布尔值,表明信息是否已从网络读取的线程更新。这一切都取决于你特别想要做的事情,但你可能希望有一些其他的模拟机制绕过scanf()。

答案 1 :(得分:1)

既然你已经特别提到过Linux,我就会在这里提出新的建议。

您可以打开(/proc/%d/fd/%d, getpid(), STDIN_FILENO)并写信给它。这实际上会打开终端的输入。我不推荐这个用于真正的程序,但是再次,scanf也不应该在真实的程序中使用。