Я пишу простую оболочку, которая принимает некоторые стандартные команды, такие как cd и ls в C. Я пытаюсь реализовать функцию, в которой пользователь может ввести «;» между командами, так что куча команд может быть записана в одной строке и выполняться отдельно. Поэтому, если я введу «cd Desktop; ls», оболочка должна перейти к рабочему столу и распечатать содержимое каталога. Проблема в том, что он выполняет только первую команду. Вот мой основной метод:
char input[1024];
while(1)
{
printf("%s ", prompt);
fgets(input, 1024, stdin);
char delims[] = ";";
char *result = NULL;
result = strtok( input, delims );
while( result != NULL )
{
printf("%s\n", result);
char * copy = malloc(strlen(result) + 1); //Create a copy of the input token
strcpy(copy, result);
format(copy);
if(programs)
{
handle();
cleanup(programs);
programs = NULL;
}
free(copy);
result = strtok( NULL, delims );
cmdno++;
}
}
Сначала я пытаюсь разбить входные данные на токены, основываясь на ";" а затем передайте токен методу format (), который выглядит следующим образом:
int format(char input[])
{
input = strtok(input, "\n");
...
}
Я знаю, что strtok вносит изменения в исходную строку, поэтому я сначала создаю копию токена, прежде чем передать его в формат. Что я делаю правильно?