#c #shell #ubuntu #parameters #arguments
#c #оболочка #ubuntu #параметры #аргументы
Вопрос:
Источник::
#include <stdio.h> // printf()
#include <stdlib.h> // exit()
#include <string.h> // string
#include <dirent.h> // microsoft base compiler. _chdir, _getcwd
#include <unistd.h> // unix base complier. getcwd, chdir
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define FILE_SIZE 1024
#define MAX 255
#define ERROR (-1)
void cmd_mkdir(int argc, char *argv);
void cmd_ls()
{
char * cwd = (char *)malloc(sizeof(char) * 1024);
DIR * dir = NULL;
struct dirent * entry = NULL;
getcwd(cwd, 1024);
if( (dir = opendir(cwd)) == NULL)
{
printf("current directory errorn");
exit(1);
}
while( (entry = readdir(dir)) != NULL)
{
printf("%sn", entry->d_name);
}
free(cwd);
closedir(dir);
}
void cmd_pwd() {
char buf[MAX];
getcwd(buf, MAX);
printf("%sn", buf);
}
int main(int argc, char *argv[])
{
char cBuf[MAX];
char *arg;
while(1) {
printf(">> ");
arg = fgets(cBuf, MAX, stdin);
if(argc < 2){
// printf("1111n"); -- check
if(strncmp(arg, "ls", 2) == 0)
cmd_ls();
else if(strncmp(arg, "pwd", 3) == 0)
cmd_pwd();
else if(strncmp(arg, "exit", 4) == 0)
break;
} // if END
else {
// printf("2222n"); -- check
if(strcmp(arg, "mkdir") == 0){
if (argc != 2)
fprintf(stderr, "Usage : jmkdir dirnamen");
if(mkdir(argv[1], 0755))
perror("mkdir error");
}
}// else END
} // while END
} // main END
Желаемый результат::
Как получить два входных значения ( mkdir
, mini_maked
) в качестве параметров после выполнения ./minishell
(исполняемый файл, реализующий оболочку)
$ ./minishell
>> mkdir mini_maked
Реализованный в настоящее ls, pwd, exit
время может быть реализован, поскольку его можно использовать без параметров, но команда, для которой требуется «имя файла команды», например, mkdir
не реализована.
Если сама программа функционирует как mkdir
, она решается с использованием значений argc и argv .
Однако, поскольку сама ./myshell
программа реализует программу оболочки, когда вы запускаете программу и получаете mkdir mini_maked
в качестве входных данных, вам сложно выполнить команду.
Если мы получим два ввода ( mkdir
, mini_maked
) после выполнения программы, как мы получим их в качестве параметров?
Комментарии:
1. После того, как вы прочитали командную строку, вам нужно разделить ее на отдельные слова. Для такой игрушечной оболочки, вероятно, достаточно разбить строку на пробелы. Это дает вам некоторое количество строк, большее нуля, первая из которых — имя команды, а остальные — аргументы и / или операторы командной строки (если ваша оболочка распознает какие-либо операторы). Помимо этого, мне непонятно, о чем вы спрашиваете.
2. Спасибо за изменение вашего предложения. И, как вы сказали, я решил это с помощью strtok. Большое вам спасибо, и это было полезно.
3. Если решаемая, пожалуйста, добавьте ответ с решением и, по возможности, примите его. Это помогает выбрать решенные и нерешенные вопросы.