【发布时间】:2011-04-11 05:40:16
【问题描述】:
我正在编写一个简单的 shell 作为 OS 课程作业,我需要在 PATH 中搜索以找到用户键入的程序,一旦找到正确的目录,我会分配一块内存,刚好足以容纳该目录名称加上程序名称,我将其作为第一个参数传递给 execv()。
我本可以静态分配 100 个左右的字符,但是有一个限制让我感到不舒服。那么当 execv() 执行时,是清理了堆还是丢失了那块内存?
这可能不是很多内存,但我只是好奇。
【问题讨论】:
-
如果你静态分配了一个缓冲区来保存你的路径,它必须至少是 Linux 绝对路径的最大长度。谷歌搜索显示这是
4096(来自/usr/src/linux-2.4.20-8/include/linux/limits.h,#define PATH_MAX 4096 /* # chars in a path name including nul */)。所以你应该包括limits.h并使你的缓冲区长度为PATH_MAX个字符。
标签: c linux operating-system