我有一个大学的任务,我需要从管道读取一个bash命令并执行这个命令。我正在考虑使用execv *,因为我可以通过将空格分隔为分隔符来创建缓冲区。问题是我不能使用STL库,我不知道如何创建这个缓冲区,因为这个缓冲区的大小是可变的。有什么建议么?在此先感谢execv的缓冲区大小
回答
如果你像下面只有一个管道命令,缓冲区大小30就足够了,更
ls -l | wc -l
但是你可以支持多个管道命令,你会得到像波纹管的命令,和你缓冲区大小必须足够它
cat index.html | grep ".com" | grep ".splunk." | cut -d "<" -f2 | cut -d ">" -f1 | grep ":" | cut -d":" -f2 | cut -d "/" -f3 | cut -d " " -f1 | grep ".splunk." | cut -d '"' -f1 | sort | uniq
你的缓冲区的大小应该是100,我选用的大小100对我的操作系统项目,像你这样的,我们实现了一个终端,它支持几乎所有的东西,多管道,重定向如...
另外,我用execvp像下面,
execvp(args[0], &args[0]);
谢谢你的回答。 是否有任何特定的原因,100是足够的管道? –
不,没有什么具体原因,我说我的终端支持这个门槛值,我觉得这个价值够了,但是你可以实现任意大小,没有限制去做 –
好的,再次感谢! –
- 1. BufferedInputStream的缓冲区大小
- 2. 缓冲区大小为GetAdaptersInfo
- 3. 增加缓冲区大小
- 4. 缓冲区大小改变
- 5. 帧缓冲区大小
- 6. Cloudconnect CSV缓冲区大小
- 7. C Windows缓冲区大小
- 8. 获取缓冲区大小
- 9. QSqlQuery缓冲区大小
- 10. AES缓冲区大小
- 11. FUSE缓冲区大小?
- 12. sprintf缓冲区大小
- 13. zlib和缓冲区大小
- 14. 超过缓冲区大小?
- 15. telnetlib read_until缓冲区大小
- 16. 小缓冲区大小的XAudio2延迟
- 17. 大缓冲区开关与小缓冲区开关的成本
- 18. 协议缓冲区:无固定大小缓冲区的符号?
- 19. 调整大小从缓冲区JPEG到另一个缓冲区
- 20. ObjectOutputStream最大缓冲区大小
- 21. 缓冲区大小大于在MPI_SEND
- 22. Emacs ansi-term最大缓冲区大小?
- 23. GetUserNameEx()返回的缓冲区的大小
- 24. 更改QMediaPlayer的缓冲区大小
- 25. Android-记录时的缓冲区大小
- 26. 缓冲区大小的影响
- 27. log4net的缓冲区大小不工作
- 28. 需要的缓冲区大小
- 29. php:// stdin缓冲区的监控大小
- 30. AVPlayer/AVPlayerItem的缓冲区大小
选择适当的高上限,做一个传球第一的来算,所以你知道你需要多少,或者通过malloc'ing一个实现自己的可增长矢量更大的区域并在您需要更多时间将数据复制到它。 –
是的,我正在考虑高的上限,但我不知道什么上限应该是xD。对于可生长的矢量,我在想,为了实现这一点,我需要读两次文本,一次用于计数,一次用于添加到缓冲区。 –
你可以选择128k或者其他足够大的东西,这样你就不太可能在任务中遇到它(128k是Linux execve的传统字节大小限制)。如果你先计算一下,你甚至不需要增长它,因为你已经知道这个尺寸,而且工作。增长只会追加到一个大小为N的缓冲区,如果您达到N,您只需分配一个2 * N的值,复制所有元素,并继续添加。 –