2016-01-14 5 views
1

Итак, вот моя проблема. У меня есть список команд, введенных пользователем, которые мне нужно использовать, чтобы перейти в execvp(). Вот пример с командой ls.Создание новой строки из записей в массиве char *

char *cmdList = {"ls", "-l", "folder1/folder2"} 

Теперь мне нужен способ, чтобы изменить эту первую запись, так что имеет вид «/ bin/LS»

Это единственный способ сделать это с помощью команды strcat? В идеале я хотел бы непосредственно изменить запись ls, чтобы я мог пройти cmdList прямо в execvp().

ответ

1

Вам не нужно указывать полный путь для использования execvp(). Поэтому вам не нужно беспокоиться об изменении первого аргумента. Например, если у вас есть массив с аргументами:

#include <unistd.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    char *cmdList[] = {"ls", "-l", "folder1/folder2", 0}; 

    execvp(cmdList[0], cmdList); 
} 

execvp() будет искать ls в вашем PATH и выполнить его.

+0

@ purep93 обратите внимание на дополнительный элемент указателя «NULL», обозначающий конец массива аргументов. –

0

Это работает для меня.

char * cmdList [] = {"ls", "-l", "folder1/folder2"};

cmdList [0] = "/ bin/1s"; printf ("% s", * cmdList);

Смежные вопросы