在Linux中工作并使用C ++。 我有一个启动线程的程序。 我需要主线程和子线程通过printf和scanf进行通信 (两个线程的代码都使用scanf和printf,并假设它与stdin和stdout通信。我必须保持这种方式)。 我设法覆盖了printf和scanf,所以我完全控制了这些功能 (我可以使用* pthread_self *来识别调用线程。)
还有待完成的工作是创建2个文件句柄,每个句柄用于通信的每个方向,并缓冲通信。 怎么办呢?
写入磁盘上的文件并不能解决我的问题,因为通信可能会很长,我无法将其存储在磁盘上。但是,我知道读取线程会在写入数据后不久读取数据,因此不需要进行大量缓冲。
特别重要的是,如果一个线程调用 scanf(“%s”,& x),那么它将被阻塞,直到另一个线程写入一些字符串和添加空格(因此在完全写入之前不会读取字符串)。
答案 0 :(得分:2)
您可以使用管道。 http://linux.die.net/man/2/pipe。您可以简单地重定向stdout和stdin,而不是重写printf和scanf。但要小心,因为printf和scanf不是可重入的。