Мне нужно создать программу, которая будет эмулировать терминал Linux. Поскольку для некоторых системных вызовов требуется 1,2 или более аргументов, я хочу убедиться, что количество заданных параметров верное. Я использую strtok()
, чтобы отделить имя вызова от аргументов, но мне нужно знать, сколько жетонов strtok()
создано для его сравнения.Подсчет количества токенов строки в C
Вот и пример код:
char *comand = (char*) malloc(sizeof(char)*100);
char *token;
char *path1 = (char*) malloc(sizeof(char)*100);
char *path2= (char*) malloc(sizeof(char)*100);
fgets(comand, 100, stdin);
printf("\nYou entered: %s \n", comand);
token = strtok(comand ," ");
//Check the number of tokens and add a condition in each IF to match
if (strcmp("ls",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
}
else if (strcmp("cat",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
}
else if (strcmp("cp",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
token = strtok(NULL," ");
strcpy(path2,token);
}
else if (strcmp("mv",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
token = strtok(NULL," ");
strcpy(path2,token);
}
else if (strcmp("find",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
}
else if (strcmp("rm",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
}
else if (strcmp("mkdir",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
}
else if (strcmp("rmdir",token) == 0) {
token = strtok(NULL," ");
strcpy(path1,token);
}
else if (strcmp("quit",token) == 0) {
exit(0);
}
else print("Number of parameters do not match);
«Системные вызовы»? С консоли? – EOF
Нет, «Системные вызовы» этого «терминала» - это процедуры, сделанные на языке C, а не в Unix. Если команда «ls», я бы назвал процедуру с именем «commLs» или что-то в этом роде и передал ей токены. – tony
Вы также можете проверить этот вопрос: http://stackoverflow.com/questions/13078926/is-there-a-way-to-count-tokens-in-c –