Разве 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};