Читаем Rust на примерах полностью

println!("! {:?}", why.kind());

});

println!("`rmdir a/c/d`");

// Удаляем пустую директорию, получаем `io::Result<()>`

fs::remove_dir("a/c/d").unwrap_or_else(|why| {

println!("! {:?}", why.kind());

});

}

Вот ожидаемый результат:

$ rustc fs.rs && ./fs

`mkdir a`

`echo hello > a/b.txt`

`mkdir -p a/c/d`

`touch a/c/e.txt`

`ln -s ../b.txt a/c/b.txt`

`cat a/c/b.txt`

> hello

`ls a`

> "a/b.txt"

> "a/c"

`rm a/c/e.txt`

`rmdir a/c/d`

И конечное состояние директории a:

$ tree a

a

|-- b.txt

`-- c

`-- b.txt -> ../b.txt

1 directory, 2 files

Альтернативный путь определения функции cat - с нотацией ?:

fn cat(path: &Path) -> io::Result {

let mut f = File::open(path)?;

let mut s = String::new();

f.read_to_string(&mut s)?;

Ok(s)

}

<p id="Смотрите_также_69"><strong><a l:href="#Смотрите_также_69">Смотрите также:</a></strong></p>

cfg!

<p id="Аргументы_программы"><strong><a l:href="#Аргументы_программы">Аргументы программы</a></strong></p><p id="Стандартная_библиотека"><strong><a l:href="#Стандартная_библиотека">Стандартная библиотека</a></strong></p>

Аргументы командной строки могут быть доступны при помощи std::env::args, который возвращает итератор, который выдаёт String для каждого аргумента:

use std::env;

fn main() {

let args: Vec = env::args().collect();

// Первый аргумент - путь, используемый для вызова программы.

println!("Мой путь {}.", args[0]);

// Оставшиеся аргументы - переданные в командной строке параметры.

// Вызов программы выглядит так:

// $ ./args arg1 arg2

println!("У меня {:?} аргумента: {:?}.", args.len() - 1, &args[1..]);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

$ ./args 1 2 3

Мой путь ./args.

У меня 3 аргумента: ["1", "2", "3"].

<p id="Крейты"><strong><a l:href="#Крейты">Крейты</a></strong></p>

В качестве альтернативы, существует несколько крейтов, которые предоставляют дополнительную функциональность при создании приложений командной сроки. Rust Cookbook показывает лучшие практики, как использовать один из самых популярных крейтов для аргументов командной строки, clap.

<p id="Парсинг_аргументов"><strong><a l:href="#Парсинг_аргументов">Парсинг аргументов</a></strong></p>

Сопоставление может быть использовано для разбора простых аргументов:

use std::env;

fn increase(number: i32) {

println!("{}", number + 1);

}

fn decrease(number: i32) {

println!("{}", number - 1);

}

fn help() {

println!("usage:

match_args

Проверяет является ли данная строка ответом.

match_args {{increase|decrease}}

Увеличивает или уменьшает число на 1.");

}

fn main() {

let args: Vec = env::args().collect();

match args.len() {

// аргументы не переданы

1 => {

println!("Я - 'match_args'. Попробуйте передать аргументы!");

},

// передан один аргумент

2 => {

match args[1].parse() {

Ok(42) => println!("Это ответ!"),

_ => println!("Это не ответ."),

}

},

// переданы одна команда и один аргумент

3 => {

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители

Все жанры