Читаем 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() {

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

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

Писать нельзя молчать
Писать нельзя молчать

Неужели ты опять отложишь мечту – написать книгу? Опять занят и считаешь затею глупостью? А ведь чтобы сотворить историю нужно совсем немного: капелька поддержки на старте, чуток теории в процессе и безудержная энергия творчества, которую я помогу тебе разбудить. Или вспомнить.Мир живёт историями, и каждый может стать увлекательным рассказчиком. В этой книге я дам ответы на самые животрепещущие вопросы писателя-новичка. Эта книга для тех, кто:• Хочет писать истории, но откладывает дело в долгий ящик;• Писал раньше, но разуверился в своих силах;• Боится показаться глупым мечтателем в глазах близких;• Боится совершить ошибки;• Просто застрял и не знает, как воплотить свою идею;• Давно пишет, но не может довести до конца ни одну историю;• Не знает, как найти свою аудиторию, как с ней общаться;• Хочет почерпнуть вдохновение от общения с коллегой по писательскому делу.Эта книга написана без лишнего пафоса и с конкретными шагами на внедрение. Все, что остается, это сесть поудобнее и приступить к чтению.В формате PDF A4 сохранен издательский макет книги.

Юрий Михайлович Окунев , Юрий Окунев

Хобби и ремесла / Учебные пособия, самоучители / Дом и досуг