Я начинаю с модуля «Операционные системы», и эти вопросы действительно застали меня врасплох. Эти вопросы не имеют решений.
(a) В Windows запустите оболочку командной строки, например. CMD. Предполагая, что вы находитесь в каталоге с некоторыми стандартными типами файлов документов, например. .doc, .pdf, .ppt и т. д. Просто попробуйте ввести само имя файла.
Для уточнения, этот вопрос предполагает, что в той же директории есть файл PDF, например U5-UnixProcess.pdf (подойдет любой файл PDF), и у вас есть программа чтения PDF. В следующем примере показано, как запустить процесс из документа: c:> U5-UnixProcess.pdf
Что просходит? Какая программа запущена? Это файл PDF работает?
(б) Объясните, в чем смысл такой функции в Windows.
(c) Почему Windows знает, что делать с файлом? (Подсказка: используйте правую кнопку мыши).
(d) Unix имеет связанную особенность. Прочитайте справочную страницу для execve и объясните функцию и как вы можете ее использовать?
Вот мои ответы, основанные на моем понимании. Я пытался найти ответы, но, похоже, нет источников, объясняющих такие деликатные вопросы.
ответы
а) Когда мы вводим имя файла, оболочка командной строки будет искать имя файла в текущем каталоге. Если он не найден, он будет искать каталоги, перечисленные в переменной окружения PATH. Как только он найдет файл, он будет искать расширение файла, чтобы узнать, какое приложение обрабатывает тип файла, который будет считывателем PDF, если расширение файла .pdf. После этого он запустит приложение как новый процесс и передаст ему имя файла.
Во всем этом процессе выполняется приложение, которое может обрабатывать файл, а не сам файл.
б) Оболочка командной строки позволяет пользователям иметь доступ к большему количеству команд, кроме того, что обеспечивает их графический пользовательский интерфейс, например, просмотр скрытых файлов.
c) Вы можете установить приложение по умолчанию, которое будет использоваться при открытии файла, чтобы сообщить Windows, что делать с файлом. Если нет приложений, которые могут запустить файл, файл не будет открыт.
г) Я в основном только что скопировал часть TutorialsPoint для этого. Не очень понимаю применение "как это использовать" здесь.
execve()
- это системный вызов, который преобразует вызывающий процесс в новый процесс и имеет сигнатуру int execve(const char *path, char *const argv[], char *const envp[]);
execve()
выполняет программу, указанную путем. путь должен быть либо двоичным исполняемым файлом, либо скриптом, начинающимся со строки вида "#! переводчик [arg] ". В последнем случае интерпретатор должен быть допустимым путевым именем для исполняемого файла, который сам по себе не является скриптом, который будет вызываться как имя файла интерпретатора [arg].
argv - это массив строк аргументов, передаваемых новой программе. envp - это массив строк, обычно в форме ключ = значение, которые передаются в качестве среды новой программе. И argv, и envp должны заканчиваться нулевым указателем. Вектор аргумента и окружение могут быть доступны основной функции вызываемой программы, если она определена как int main(int argc, char *argv[], char *envp[])
.
Может ли кто-нибудь укрепить мое понимание этих тем и, возможно, направить меня к источникам, где я могу прочитать по этим темам?