execv的缓冲区大小

时间:2017-04-13 17:16:28

标签: c bash pipe buffer exec

我有一个大学的作业,我需要从管道读取一个bash命令并执行此命令。我正在考虑使用execv *因为我可以通过将空格拆分为分隔符来创建缓冲区。问题是我不能使用STL库,我无法弄清楚应该如何创建这个缓冲区,因为这个缓冲区的大小是可变的。有什么建议?提前致谢

1 个答案:

答案 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]);