我有一个运行2个线程的程序。第一个是等待用户输入(使用scanf),第二个是通过udp套接字监听一些数据。我想模拟用户输入,以便每次我收到特定的udp数据包时使用第一个线程处理特定通知。我知道我可以在线程之间共享变量,所以我的问题是:我可以强制scanf从另一个线程获取输入吗?我可以跳过第一个帖子中的scanf吗?
答案 0 :(得分:1)
我相信scanf()的定义是从stdin读取。但是,就像你说的那样,不同的线程共享内存,因此很容易在它们之间传递信息。也许有一些共享变量和某种布尔值,表明信息是否已从网络读取的线程更新。这一切都取决于你特别想要做的事情,但你可能希望有一些其他的模拟机制绕过scanf()。
答案 1 :(得分:1)
既然你已经特别提到过Linux,我就会在这里提出新的建议。
您可以打开(/proc/%d/fd/%d, getpid(), STDIN_FILENO)
并写信给它。这实际上会打开终端的输入。我不推荐这个用于真正的程序,但是再次,scanf
也不应该在真实的程序中使用。