为项目创建自己的Shell程序。当前正在尝试fork()
,然后通过发送执行ls的位置然后发送ls的参数(即文件路径和选项)来执行execv()
。
到目前为止,ls
的输出仅向我显示了我的Shell程序所在目录中的内容。
// directoryPath[] is /home/pi/cs460
// option[] i use NULL or -al for the time being
void lsProcess(char directoryPath[], char option[])
{
string lsLocation = "/bin/ls";
char * lsPlace = new char[lsLocation.size() + 1];
strcpy(lsPlace, lsLocation.c_str());
char * args[] = {lsPlace, NULL, directoryPath};
execv(args[0], args);
exit(0);
}
答案 0 :(得分:2)
char * args[] = {lsPlace, NULL, directoryPath};
不会char * args[] = {lsPlace, directoryPath, NULL};
吗? ls
解析参数数组时,它在args [1]处击中null并停止解析。另外,您可能应该验证directoryPath
是否为null终止...
编辑
如果要使用占位符作为选项,则需要包括一个仅包含null的元素数组,以表示一个空字符串,然后在末尾添加另一个null
char options[1];
options[0] = 0;
char * args[] = {lsPlace, options, directoryPath, NULL};