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

use std::sync::mpsc::{Sender, Receiver};

use std::sync::mpsc;

use std::thread;

static NTHREADS: i32 = 3;

fn main() {

// Каналы имеют две конечные точки: Sender` и `Receiver`,

// где `T` - тип передаваемового сообщения.

// (аннотации типов избыточны)

let (tx, rx): (Sender, Receiver) = mpsc::channel();

let mut children = Vec::new();

for id in 0..NTHREADS {

// Отправитель может быть скопирован

let thread_tx = tx.clone();

// Каждый поток отправит через канал его id

let child = thread::spawn(move || {

// Поток забирает владение `thread_tx`

// Каждый поток добавляет своё сообщение в очередь канала

thread_tx.send(id).unwrap();

// Отправка - не блокирующая операция, поток незамедлительно

// продолжит работу после отправки сообщения

println!("поток {} завершён", id);

});

children.push(child);

}

// Здесь все сообщения собираются

let mut ids = Vec::with_capacity(NTHREADS as usize);

for _ in 0..NTHREADS {

// Метод `recv` "достаёт" сообщения из канала

// `recv` блокирует текущий поток, если доступных сообщений нет

ids.push(rx.recv());

}

// Ожидаем, когда потоки завершат всю оставшуюся работу

for child in children {

child.join().expect("Упс! Дочерний поток паникует");

}

// Посмотрите порядок, с которым сообщения были отправлeны

println!("{:?}", ids);

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="path"><strong><a l:href="#path">Path</a></strong></p>

Структура Path представляет пути к файлу в файловой системе. Есть два вида Path: posix::Path, для UNIX - подобных систем, и windows::Path, для Windows. В прелюдии экспортируется соответствующий платформозависимый вариант Path.

Path может быть создан из OsStr, и предоставляет некоторые методы для получения информации о файле или директории, на которые он указывает.

Обратите внимание, что внутренне представление Path не является UTF-8 строкой, но вместо этого хранит вектор байт (Vec). Следовательно, преобразование Path в &str не бесплатно и может закончиться неудачей (возвращается Option).

use std::path::Path;

fn main() {

// Создаём `Path` из `&'static str`

let path = Path::new(".");

// Метод `display` возвращает показываемую структуру

let _display = path.display();

// `join` соединяет `path` с байтовым контейнером, используя ОС-специфичный

// разделитель, и возвращает новый путь

let new_path = path.join("a").join("b");

// Конвертируем путь в строковый срез

match new_path.to_str() {

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

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

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

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

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

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