В Rust модуль std::os обеспечивает абстракцию над функциональностью операционной системы. Это позволяет нам взаимодействовать с базовой операционной системой для работы с переменными среды, операциями файловой системы, управлением процессами и многим другим.
В этом примере мы рассмотрим некоторые основные операции, которые вы можете выполнять в Unix с помощью модуля Rust std::os.
Полезно помнить, что это обширный модуль, содержащий множество типов и функций для различных операций, связанных с Unix. Поэтому, пожалуйста, рассмотрите документацию для справки по соответствующим процессам.
ОС Rust в Linux
В Linux мы можем получить доступ к специфичным для Unix функциям и типам, которые предоставляются модулем std::os::unix, подмодулем модуля std::os в Rust.
Этот модуль является частью стандартной библиотеки Rust и, следовательно, не требует установки каких-либо внешних крейтов или зависимостей.
Давайте рассмотрим некоторые основные API и операции, которые мы можем выполнять в системе Linux из этого модуля.
Доступ к переменным среды
Мы можем получить доступ к переменным среды, используя модуль std::env. Например, std::env::var('PATH') извлекает значение переменной окружения PATH.
Рассмотрим следующий пример программы:
используйте std::env;используйте std::ffi::OsString;
рука ( ) {
// Доступ к определенной переменной среды
если позволять Хорошо ( ценить ) = среда::вар ( 'WAYLAND_DISPLAY' ) {
печать ! ( 'WAYLAND_DISPLAY={}' , ценить ) ;
}
// Перебрать все переменные окружения
для ( ключ, значение ) в env::wars_us ( ) {
позволять key_string = key.to_string_lossy ( ) ;
позволять value_string = value.to_string_lossy ( ) ;
печать ! ( '{}:{}' , ключевая_строка, значение_строка ) ;
}
// Доступ к определенной переменной среды как ан ` Осстринг `
если позволять Некоторый ( ценить ) = env::var_us ( 'ТИП ХОЗЯИНА' ) {
// Конвертировать ` Осстринг ` к ` Нить ` если нужный
если позволять Некоторый ( value_str ) = значение.to_str ( ) {
печать ! ( 'ХОСТИП={}' , значение_стр ) ;
}
}
}
В данном примере мы начинаем с импорта необходимых модулей. В данном случае нас интересуют std::env и std::ff::OsString.
Чтобы получить доступ к определенной переменной среды, мы можем использовать функцию env::var и передать имя значения, которое мы хотим получить. В этом случае мы получаем значение переменной WAYLAND_DISPLAY.
Функция возвращает значение переменной как тип результата.
Мы также можем перебрать все переменные среды, используя функцию env::vars_os. Это возвращает итератор с парами ключ-значение переменных среды. Следует отметить, что значения возвращаются как тип OsString. Затем мы можем преобразовать их в строковые значения, используя функцию to_string_lossy.
Мы также можем получить доступ к определенным переменным среды, используя функцию env::var_os. Это должно вернуть тип
В результате получается следующее:
WAYLAND_DISPLAY =wayland- 0HOSTTYPE =x86_64
Операции ФС с использованием модуля ОС
Как вы можете догадаться, модуль ОС предоставляет различные функции и методы для выполнения операций, связанных с файловой системой.
Возьмите следующую программу, которая демонстрирует различные операции, которые мы можем выполнять с помощью модуля std::os в Linux:
используйте std::fs;рука ( ) {
// Прочитать файл
если позволять Хорошо ( содержание ) = fs::read_to_string ( '/home/debian/.bashrc' ) {
печать ! ( 'башрк: {}' , содержание ) ;
}
// Создать новый каталог
если позволять ошибся ( ошибаться ) = fs:: create_dir ( '/home/debian/new_dir' ) {
eprintln ! ( 'Не удалось создать каталог: {}' , ошибаюсь ) ;
}
// Удалить файл
если позволять ошибся ( ошибаться ) = fs::remove_file ( '/home/debian/remove_me.txt' ) {
eprintln ! ( 'Не удалось удалить файл: {}' , ошибаюсь ) ;
}
}
В данном примере мы демонстрируем, как мы можем прочитать содержимое файла, используя метод fs::read_to_string(). Метод принимает путь к целевому файлу и возвращает содержимое файла в виде строки.
Мы также можем создать новый каталог, используя функцию fs::create_dir() и передав путь к целевому каталогу в качестве параметра.
Наконец, мы можем удалить конкретный файл с помощью функции fs::remove_file() и передать целевой файл в качестве параметра.
ПРИМЕЧАНИЕ: Приведенные примеры — это основные примеры того, как выполнять операции с файловой системой в Linux с помощью модуля std::fs. Rust предоставляет полный набор методов и функций, которые демонстрируются здесь. Обратитесь к документации, чтобы узнать больше.
Управление процессами с помощью модуля ОС
Как вы можете догадаться, модуль ОС предоставляет подмодули и функции для работы с процессами в системе.
Возьмите следующий пример кода:
используйте std::process:: { команда, Выход } ;рука ( ) {
// запустить лс команда
позволять вывод = Команда:: новый ( 'лс' )
.arg ( '-' )
.выход ( )
.ожидать ( 'Не удалось выполнить команду' ) ;
если выход.статус.успех ( ) {
позволять стандартный вывод = String::from_utf8_lossy ( & вывод.stdout ) ;
печать ! ( 'Вывод команды: \n {}' , стандартный вывод ) ;
} еще {
позволять stderr = String::from_utf8_lossy ( & вывод.stderr ) ;
eprintln ! ( 'Команда не выполнена: \n {}' , стдерр ) ;
Выход ( 1 ) ;
}
}
В данном примере мы начинаем с импорта необходимых модулей. В этом случае нам понадобятся методы «команда» и «выход» из подмодуля std::process.
Затем мы используем функцию Command::new() для запуска команды «ls» и передачи аргументов команде.
В случае успеха команда должна вернуть список каталогов для текущего рабочего каталога следующим образом:
Заключение
Мы рассмотрели, как использовать различные функции и методы, предоставляемые модулем и подмодулями std::os, для выполнения множества операций в Linux и Unix-подобных системах. Помните, что модуль std::os — это расширенный модуль, который содержит более широкий набор функций, чем те, которые демонстрируются в этом руководстве.