Добавление пользовательского флага в команду CAT в MINIX

Я пытаюсь изменить команду 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 не распознается.

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


person BEEET Hvcw    schedule 18.03.2019    source источник


Ответы (1)


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

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

person SergeyA    schedule 18.03.2019
comment
Это миникс, а не линукс, юзерланд BSDish, так что getopt_long нет. Просто getopt. - person n. 1.8e9-where's-my-share m.; 18.03.2019
comment
Я посмотрел на это, но, к сожалению, это не облегчило ситуацию. Как я понял, getopt ищет букву в optstring. Чтобы заставить флаг -H работать, я нашел эту строку опций и добавил туда букву «H». Я прав? И если да, то в каком исходном файле я могу найти верхнюю строку, чтобы изменить ее? - person BEEET Hvcw; 18.03.2019
comment
@BEEETHvcw ваша первая часть верна, вам нужно изменить optstring. Я не знаю, где миникс-версия cat определяет это, возможно, вы можете просто выполнить поиск в репозитории. - person SergeyA; 18.03.2019
comment
О, я тупой. Все это время он был прямо перед моими глазами, спрятанный у всех на виду в строке 83: while ((ch = getopt(argc, argv, beflnstuv)) != -1). Сейчас я перекомпилирую MINIX и надеюсь, что это сработает. - person BEEET Hvcw; 18.03.2019