【发布时间】:2017-04-13 17:16:28
【问题描述】:
我有一个大学的任务,我需要从管道中读取一个 bash 命令并执行这个命令。我正在考虑使用 execv*,因为我可以通过用空格作为分隔符来创建缓冲区。问题是我不能使用 STL 库,而且我不知道应该如何创建这个缓冲区,因为这个缓冲区的大小是可变的。有什么建议么?提前致谢
【问题讨论】:
-
选择一个合适的上限,先计算一遍,这样你就知道你需要多少,或者通过分配更大的区域并随时复制数据来实现你自己的可增长向量你需要更多。
-
是的,我在考虑上限,但我不知道上限应该是多少 xD。对于可增长的向量,我认为为了实现这一点,我需要读取两次文本,一次用于计数,一次用于添加到缓冲区。
-
您可以选择 128k 或其他足够大的值,这样您就不太可能在分配中碰到它(128k 是 Linux execve 的传统字节大小限制)。如果你先数,你甚至不需要增长它,因为你已经知道它的大小,这很有效。增长只是附加到大小为 N 的缓冲区,如果达到 N,则只需分配一个 2*N 的缓冲区,复制所有元素,然后继续添加。