В Rust модулът std::os предоставя абстракция върху функционалността на операционната система. Тя ни позволява да взаимодействаме с основната операционна система, за да работим с променливите на средата, операциите на файловата система, управлението на процесите и др.
В този пример ще разгледаме някои основни операции, които можете да извършвате на Unix с помощта на модула Rust std::os.
Добре е да запомните, че това е обширен модул и съдържа много типове и функции за различни операции, свързани с Unix. Затова, моля, разгледайте документацията за справка на съответните процеси.
Rust OS в Linux
В Linux имаме достъп до специфичните за Unix функции и типове, които се предоставят от модула std::os::unix, подмодул на модула std::os в Rust.
Този модул е част от стандартната библиотека на Rust и следователно не изисква да инсталирате външна каса или зависимости.
Нека разгледаме някои основни API и операции, които можем да извършим на Linux система от този модул.
Достъп до променливите на средата
Можем да осъществим достъп до променливите на средата с помощта на модула std::env. Например std::env::var(“PATH”) извлича стойността на променливата на средата PATH.
Помислете за следната примерна програма:
използвайте std::env;използвайте std::ffi::OsString;
fn ръка ( ) {
// Достъп до конкретна променлива на средата
ако позволявам Добре ( стойност ) = env::var ( „WAYLAND_DISPLAY“ ) {
println ! ( „WAYLAND_DISPLAY={}“ , стойност ) ;
}
// Повторете всички променливи на средата
за ( ключ, стойност ) в env::wars_us ( ) {
позволявам key_string = key.to_string_lossy ( ) ;
позволявам value_string = value.to_string_lossy ( ) ;
println ! ( „{}:{}“ , ключ_низ, стойност_низ ) ;
}
// Достъп до конкретна променлива на средата като ан ` OsString `
ако позволявам някои ( стойност ) = env::var_us ( 'HOSTTYPE' ) {
// Преобразуване ` OsString ` към а ` низ ` ако необходими
ако позволявам някои ( value_str ) = value.to_str ( ) {
println ! ( „HOSTTYPE={}“ , value_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
FS операции с помощта на OS модула
Както можете да предположите, модулът на ОС предоставя различни функции и методи за извършване на операции, свързани с файловата система.
Вземете следната програма, която демонстрира различните операции, които можем да извършим с помощта на модула std::os в Linux:
използвайте std::fs;fn ръка ( ) {
// Прочетете а файл
ако позволявам Добре ( съдържание ) = fs::read_to_string ( '/home/debian/.bashrc' ) {
println ! ( 'bashrc: {}' , съдържание ) ;
}
// Създайте нова директория
ако позволявам грешка ( грешка ) = fs::create_dir ( '/home/debian/new_dir' ) {
eprintln ! ( „Неуспешно създаване на директория: {}“ , грешка ) ;
}
// Премахнете a файл
ако позволявам грешка ( грешка ) = fs::remove_file ( '/home/debian/remove_me.txt' ) {
eprintln ! ( „Неуспешно премахване на файл: {}“ , грешка ) ;
}
}
В дадения пример ние демонстрираме как можем да прочетем съдържанието на файл с помощта на метода fs::read_to_string(). Методът взема пътя до целевия файл и връща съдържанието на файла като низ.
Можем също да създадем нова директория, като използваме функцията fs::create_dir() и предаваме пътя до целевата директория като параметър.
И накрая, можем да премахнем конкретен файл с помощта на функцията fs::remove_file() и да предадем целевия файл като параметър.
ЗАБЕЛЕЖКА: Предоставените примери са някои основни примери за това как да изпълнявате операциите на файловата система на Linux с помощта на модула std::fs. Rust предоставя изчерпателна колекция от методи и функции, които са демонстрирани тук. Обърнете се към документацията, за да научите повече.
Управление на процеси с помощта на OS модула
Както се досещате, OS модулът предоставя подмодули и функции за работа с процесите в системата.
Вземете следния примерен код:
използвайте std::process:: { команда, изход } ;fn ръка ( ) {
// стартирайте ls команда
позволявам изход = Команда::ново ( 'л' )
.arg ( '-на' )
.изход ( )
.очаквам ( „Неуспешно изпълнение на командата“ ) ;
ако изход.статус.успех ( ) {
позволявам stdout = String::from_utf8_lossy ( и изход.stdout ) ;
println ! ( 'Изход на командата: \н {}' , стандартен изход ) ;
} друго {
позволявам stderr = String::from_utf8_lossy ( и изход.stderr ) ;
eprintln ! ( „Командата е неуспешна: \н {}' , stderr ) ;
изход ( 1 ) ;
}
}
В дадения пример започваме с импортиране на необходимите модули. В този случай се нуждаем от методите „command“ и „exit“ от подмодула std::process.
След това използваме функцията Command::new(), за да изпълним командата „ls“ и да предадем аргументите на командата.
Ако е успешна, командата трябва да върне списъка с директории за текущата работна директория, както следва:
Заключение
Проучихме как да използваме различните функции и методи, които се предоставят от модула и подмодулите std::os за извършване на множество операции в Linux и Unix-подобни системи. Не забравяйте, че модулът std::os е обширен модул, който съдържа по-широка колекция от функции от тези, които са демонстрирани в този урок.