我有一个大学的作业,我需要从管道读取一个bash命令并执行此命令。我正在考虑使用execv *因为我可以通过将空格拆分为分隔符来创建缓冲区。问题是我不能使用STL库,我无法弄清楚应该如何创建这个缓冲区,因为这个缓冲区的大小是可变的。有什么建议?提前致谢
答案 0 :(得分:2)
如果只执行下面的一个管道命令,缓冲区大小30就足够了,甚至更多
ls -l | wc -l
但是你可以支持多个管道命令,你会得到一个像bellow这样的命令,你的缓冲区大小必须足够
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]);