Как использовать ls в программе по указанному пути к файлу? - PullRequest
0 голосов
/ 10 апреля 2019

Создание собственной программы оболочки для проекта.В настоящее время пытаемся fork() затем выполнить execv(), отправив местоположение, в котором выполняется ls, и затем отправив аргументы для ls, которые представляют собой путь к файлу и параметры.

Пока что вывод ls показывает только то, чтов каталоге, где находится моя программа оболочки.

// 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 Ответ

2 голосов
/ 10 апреля 2019

Разве char * args[] = {lsPlace, NULL, directoryPath}; не должно быть char * args[] = {lsPlace, directoryPath, NULL};? Когда ls анализирует ваш массив аргументов, он сбрасывает ноль в args [1] и останавливает синтаксический анализ. Кроме того, вам, вероятно, следует убедиться, что значение directoryPath завершено нулем ...

EDIT

Если вы хотите заполнитель для опций, вам нужно включить массив из одного элемента, который содержит только нуль, чтобы представить пустую строку, а затем добавить еще один ноль в конце

char options[1];
options[0] = 0;

char * args[] = {lsPlace, options, directoryPath, NULL};
...