Добавление пользовательского флага в команду CAT в MINIX - PullRequest
1 голос
/ 18 марта 2019

Я пытаюсь изменить команду cat в MINIX 3.2.1, и у меня возникли некоторые проблемы с ней. Я хочу добавить флаг -H, чтобы при его использовании имя файла печаталось до его содержимого. Я добавил некоторый код в cat.c (ссылаясь на номера оригинальных строк):

Строка 64 (Hflag переменная):

int Hflag, bflag, eflag, fflag, lflag, nflag, sflag, tflag, vflag;

Строка 85 (регистр 'H'):

        case 'H':
            Hflag = 1;
            break;
        case 'b':

Строка 130 (параметр Hflag):

if (Hflag || bflag || eflag || nflag || sflag || tflag || vflag)

Строка 142 (добавлено fprintf, чтобы гарантировать, что cat.c действительно было добавлено в перекомпилированную MINIX):

fprintf(stdout, "new line\n");
FILE *fp;

Строка 157 (строка, в которой должно быть напечатано имя файла):

fprintf(stdout, "%s\n", *argv);
filename = *argv++;

Проблема в том, что после перекомпиляции (make build в /usr/src) cat, похоже, не распознает новый флаг -H. Если я наберу

# cat -H .exrc

Я получаю

cat: unknown option -- H

Однако, если я наберу

# cat -b .exrc

I get
new line
.exrc
1  set autoindent autowrite report=2 showmatch

Так что cat фактически изменилось, так как я получаю строку "новой строки", а также строку ".exrc" (похоже, я должен был поместить это в условие if, но в любом случае), но -H - это не распознан.

Что я сделал не так? Что мне действительно нужно сделать, чтобы добавить новый флаг? Заранее спасибо.

1 Ответ

6 голосов
/ 18 марта 2019

Поскольку cat в Minix использует getopt, вам также необходимо добавить новую опцию в вызов getopt (в котором перечислены все возможные опции).

Код, который вы предоставили, не делает этого. Вы также можете проконсультироваться man getopt.

...