Поскольку вы сказали, что у вас возникли проблемы из-за того, что система была доступна только для чтения в однопользовательском режиме, загрузитесь в однопользовательский режим и сделайте
mount -uw /
Это сделает ваш диск не доступным только для чтения, но вам придется сделать это снова, если вы снова загрузитесь в однопользовательский режим. Затем попробуйте переместить папку var в папку /private и сделать ссылку на нее, используя
link -s /private/var /var
Вызовы exec*()
просто запускают программу и передают ей аргументы командной строки. Базовый системный вызов не знает, что должны означать аргументы, это зависит от запущенного процесса.
Вы можете использовать exec*()
для запуска оболочки, совместимой с POSIX -, и передать ей эту командную строку, например. с execl("/bin/sh", "/bin/sh", "-c", "echo hello && mkdir testing", (char *) NULL)
.Тогда оболочка запустит mkdir
только в том случае, если echo
завершится успешно.
Но так как ваше задание состояло в том, чтобы реализовать оболочку и оператор &&
самостоятельно, выполнение этого путем вызова внешней, уже существующей оболочки, на самом деле не соответствует духу задания. Вы можете просто использовать какую-нибудь существующую оболочку для начала и не писать ни одной строки кода на C.