1

在 Linux 中工作并使用 C++。我有一个启动线程的程序。我需要主线程和子线程通过 printf 和 scanf 进行通信(两个线程的代码都使用 scanf 和 printf 并假设它与 stdin 和 stdout 通信。我必须保持这种方式)。我设法覆盖了 printf 和 scanf,因此我可以完全控制这些函数(并且我可以使用 *pthread_self* 来识别调用线程)。

剩下要做的是创建 2 个文件句柄,一个用于通信的每个方向,并缓冲通信。如何才能做到这一点?

写入磁盘上的文件并不能解决我的问题,因为通信可能很长,而且我无法将其存储在磁盘上。但是,我知道读取线程会在数据写入后不久读取数据,因此不需要太多缓冲。

特别重要的是,如果一个线程调用scanf("%s", &x)那么它将被阻塞,直到另一个线程写入一些字符串添加空格(因此字符串在完全写入之前不会被读取)。

4

1 回答 1

2

您可以使用管道。http://linux.die.net/man/2/pipe。您可以简单地重定向标准输出和标准输入,而不是覆盖 printf 和 scanf。不过要小心,因为 printf 和 scanf 是不可重入的。

于 2011-06-29T21:46:39.953 回答