如何在程序中的指定文件路径上使用ls?

时间:2019-04-10 01:04:50

标签: c++ ls execv

为项目创建自己的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);
}

1 个答案:

答案 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};