C ++流重定向

时间:2018-03-12 14:07:47

标签: c++ embedded

在嵌入式C中,我使用printf重定向到系统调用" _write"这允许我重载_write并重定向到Uart或Usb VCP。

现在在嵌入式C ++中我想对std streams std :: cout std :: cin做同样的事情。

通话在哪里?在调用cout / cin时我最终会在哪里结束?还有一个系统调用,我可能超载?

printf("hi") --> _write()
std::cout << "hi" --> ????????????

由于我无法调试标准库调用,我不知道那里会发生什么。

如果有人有这方面的经验,请给我一些例子和tipps。

2 个答案:

答案 0 :(得分:2)

大多数标准C ++库是使用底层C库实现的(在任何情况下,它本身都是C ++库的一个子集)。

C ++库通常不需要为C库提供单独的重新定位层。

您不需要访问库源来演示这一点。您可以简单地在_write放置一个断点(在您的情况下 - 该符号绝不是给定的),然后运行cout代码以证明它是使用{{1}实现的系统调用。

答案 1 :(得分:0)

归功于liliscent。上面的代码片段表明,printf和cout两个调用都在同一个写系统调用中结束。

...
brk(0x775000)                           = 0x775000
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 17), ...}) = 0
write(1, "hihi", 4hihi)                     = 4
exit_group(0)                           = ?
+++ exited with 0 +++