[cdev] Утилита Echo
Карабанова Елена
ElenaKarabanova17 на yandex.ru
Ср Мар 17 16:13:35 MSK 2010
Здравствуйте,
спасибо большое за вашу подсказку она очень мне помогла.
Функцию свою я вынесла за пределы main и изменила логику программы
я в начале используя getopt, нахожу месторасположение опций -e -E -n
далее
если опций не было указано
то печатается вся строка кроме команды,
а если указаны опции, то я смотрю какая опция была последней
1) если последняя была -е, то я обрабатываю аргументы с учетом команд \\t \\n и т.д
.
2) если последняя была -E, то я вывожу все аргуметы без учета команд \\t \\n и т.д.
3) если последняя была -n, то я проверяю была ли указана также опция -е, если была указана, то проверяю чтобы -е было написано позже опции -E
если эти условия прошли то я обрабатываю аргументы с учетом команд \\t \\n и т.д.
если нет то я вывожу все аргуметы без учета команд \\t \\n и т.д.
на текущий момент моя утилита понимает опции -e -E -n, но только если они идут сразу после команды
пример:
если написать echo2 -e 1234\\t123 выдаст 1234 123
если написать echo2 -e -E 1234\\t123 выдаст 1234\t123
если написать echo2 -e -E -n 1234\\t123 выдаст 1234\t123 но не перейдёт на новую строчку
а вот стандартная утилита echo если написать echo 1234 -e 5678 так и выведет 1234 -e 5678
а моя утилита выведет 1234 5678
так как после работы getopt вносит изменения в расположение аргументов
argv[0] = echo;
argv[1] = -e;
argv[2] = 1234;
argv[3] = 5678;
можно сделать, чтобы если сразу после команды не указано опций, то чтобы дальше по всей строчке аргументов которые ввел пользователь не шёл поиск
я читала статью http://habrahabr.ru/blogs/nix_coding/55665/ и нашла там следующее
"Следует заметить, что стандартная функция getopt() останавливается сразу как только найдет первый аргумент начинающийся не с символа "-", GNU вариант функции просматривает в поисках опций, всю командную строку. Поведение GNU функции можно изменить (но это выходит за рамки статьи)."
наверное это мой случай
не работает команда "\\" выдает ошибку если написать echo2 -e \\
ORBIT_SOCKETDIR=/tmp/orbit-Elena
не работает команда "\\с" проблема с реализацией
я вам посылаю исходный код, и откомпиллированный файл
у меня стоит Fedora12, а писала я программу в KDevelop: С/С++
пробовала откомпиллировать исходный код в терминале, используя gcc откомпиллировалось успешно
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: echo2
Type: application/octet-stream
Size: 6896 bytes
Desc: отсутствует
URL: <http://amplab.syktsu.ru/pipermail/cdev/attachments/20100317/afac9237/attachment.obj>
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: main.c
Type: application/octet-stream
Size: 3682 bytes
Desc: отсутствует
URL: <http://amplab.syktsu.ru/pipermail/cdev/attachments/20100317/afac9237/attachment-0001.obj>
Подробная информация о списке рассылки cdev