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

$ echo -e "127.0.0.1\n192.168.0.1\n" > hosts

$ rustc read_lines.rs && ./read_lines

127.0.0.1

192.168.0.1

Такой подход более эффективен, чем создание String в памяти, особенно при работе с большими файлами.

<p id="Дочерние_процессы"><strong><a l:href="#Дочерние_процессы">Дочерние процессы</a></strong></p>

Структура process::Output представляет результат завершённого дочернего процесса, и структура process::Command - это строитель процесса.

use std::process::Command;

fn main() {

let output = Command::new("rustc")

.arg("--version")

.output().unwrap_or_else(|e| {

panic!("Ошибка выполнения процесса {}", e)

});

if output.status.success() {

let s = String::from_utf8_lossy(&output.stdout);

print!("rustc завершился успешно и вывел в stdout:\n{}", s);

} else {

let s = String::from_utf8_lossy(&output.stderr);

print!("rustc завершился с ошибкой и вывел в stderr:\n{}", s);

}

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

(Рекомендуется попробовать предыдущий пример с неправильным флагом обращения к rustc)

<p id="pipes"><strong><a l:href="#pipes">Pipes</a></strong></p>

Структура std::Child представляет собой запущенный дочерний процесс и предоставляет дескрипторы stdin, stdout и stderr для взаимодействия с этим процессом через каналы (pipes).

use std::io::prelude::*;

use std::process::{Command, Stdio};

static PANGRAM: &'static str =

"the quick brown fox jumped over the lazy dog\n";

fn main() {

// Создадим команду `wc`

let process = match Command::new("wc")

.stdin(Stdio::piped())

.stdout(Stdio::piped())

.spawn() {

Err(why) => panic!("не удалось создать wc: {}", why.description()),

Ok(process) => process,

};

// Запишем строку в `stdin` созданной команды.

//

// `stdin` имеет тип `Option`, но так как мы знаем, что экземпляр должен быть только один,

// мы можем напрямую вызвать `unwrap`.

match process.stdin.unwrap().write_all(PANGRAM.as_bytes()) {

Err(why) => panic!("не удалось записать в stdin команды wc: {}", why),

Ok(_) => println!("пангамма отправлена"),

}

// Так как `stdin` не существует после вышележащих вызовов, он разрушается

// и канал закрывается.

//

// Это очень важно, иначе `wc` не начал бы обработку только что

// отправленных данных.

// Поле `stdout` имеет тип `Option` и может быть извлечено.

let mut s = String::new();

match process.stdout.unwrap().read_to_string(&mut s) {

Err(why) => panic!("невозможно прочесть stdout команды wc: {}", why),

Ok(_) => print!("wc ответил:\n{}", s),

}

}

<p id="Ожидание"><strong><a l:href="#Ожидание">Ожидание</a></strong></p>
Перейти на страницу:

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

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

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

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

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