Rust Std::OS в Linux

Rust Std Os V Linux



В 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. Това трябва да върне тип , който можем да конвертираме в низ с помощта на функцията to_str().

Полученият резултат е както следва:

WAYLAND_DISPLAY =wayland- 0
HOSTTYPE =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 е обширен модул, който съдържа по-широка колекция от функции от тези, които са демонстрирани в този урок.