Я пишу свою собственную оболочку на C. Она должна иметь возможность отображать текущий каталог пользователя, выполнять команды на основе полного пути (необходимо использовать execv) и позволять пользователю изменять каталог с компакт-диском.
Это домашнее задание. Преподаватель дал нам только базовый курс по C и очень краткий набросок того, как должна работать программа. Поскольку я не из тех, кто легко сдается, я изучал, как это сделать в течение трех дней, но теперь я в тупике.
Это то, что у меня есть до сих пор:
- Отображает имя пользователя, имя компьютера и текущий каталог (по умолчанию домашний каталог).
- Запрашивает у пользователя ввод и получает ввод
- Разделяет ввод пользователя с помощью " " на массив аргументов
- Разделяет переменную окружения PATH с помощью «:» на массив токенов.
Я не уверен, как действовать дальше. Я знаю, что мне нужно использовать команду execv, но в своих исследованиях в Google я действительно не нашел примера, который я понимаю. Например, если команда bin/ls, как execv узнает, что нужно отобразить все файлы/папки из домашнего каталога? Как сообщить системе, что я изменил каталог?
Я много пользовался этим сайтом, который оказался полезным: http://linuxgazette.net/111/ramankutty.html, но опять же, я в тупике.
Спасибо за вашу помощь. Дайте мне знать, если я должен опубликовать часть моего существующего кода, хотя я не был уверен, что это необходимо.
exevc(args[0], args)
? Если пользователь вводит bin/ls вместо /bin/ls, нужно ли добавлять его в рабочий каталог? - person user1287523   schedule 29.09.2012execv()
возвращается, вы знаете, что возникла проблема, поэтому вместо этого вы пытаетесь использовать следующую запись в PATH, останавливаясь только тогда, когда не осталось каталогов для попытки. Это вариация на тему «проще попросить прощения, чем разрешения». Помимо всего прочего, выяснить, может ли кто-то выполнить команду, сложно — вдвойне, если в игре есть ACL. - person Jonathan Leffler   schedule 29.09.2012