Я пишу программу, которая запрашивает у пользователя команду linux bash, а затем сохраняет их в массивах указателей (вроде как char *argv[]
). Затем программа должна выполнить проверку, если эта команда является обычной командой bash или командой cd (change directory)
. Если его команда cd
, тогда она должна использовать что-то вроде chdir()
. Если команда - это что-то еще, я хочу использовать некоторые варианты системного вызова exec()
для выполнения этой команды.Функция chdir() не будет работать. Зачем?
Однако я не с первой частью (chdir()
).
int ii=-1
printf("Enter the command: ");
fgets(command, 100, stdin);
command[strlen(command)-1]=0;
printf("Command = %s\n", command);
if (command[0]=='c' && command[1]=='d' && command[2]==' ')
{
printf("I am inside CD now.\n");
cd_dump[0] = strtok(command," ");
while(sub_string[++ii]=strtok(NULL, " ") != NULL)
{
printf("%s\n", sub_string[0]);
}
chdir(sub_string[0]);
}
Edit: Я также попытался следующие, если заявление без удачи.
if (command[0]=='c' && command[1]=='d' && command[2]==' ')
{
printf("I am inside CD now.\n");
chdir(command+3);
}
К сожалению, программа не правда делать то, что я хочу его, и даже после того, как часы, пытаясь решить проблему, я понятия не имею, почему. Что я сделал не так? Также, если я ввожу cd /home/
, почему результат вывода в sub_string [0] заканчивается добавлением «Enter key» на выходе? Сохраняет ли strtok ключ Enter в строке?
Любая помощь по этому вопросу очень ценится.
Вы уверены, что хотите 'command [3]' внутри этого, если? (Те, что до этого равны 0 и 1) – FDinoff
fgets работает таким образом. [Функция fgets() должна считывать байты из потока в массив, на который указывает s, до тех пор, пока не будут прочитаны n-1 байты, или *** a будет считан и передан s *** или конец файла (http://pubs.opengroup.org/onlinepubs/009695399/functions/fgets.html) –
Что такое начальное значение 'ii'? Если это не '-1', преинкремент означает, что' sub_string [0] 'не содержит имя каталога. –