在嵌入式C中,我使用printf重定向到系统调用" _write"这允许我重载_write并重定向到Uart或Usb VCP。
现在在嵌入式C ++中我想对std streams std :: cout std :: cin做同样的事情。
通话在哪里?在调用cout / cin时我最终会在哪里结束?还有一个系统调用,我可能超载?
printf("hi") --> _write()
std::cout << "hi" --> ????????????
由于我无法调试标准库调用,我不知道那里会发生什么。
如果有人有这方面的经验,请给我一些例子和tipps。
答案 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 +++