Читаем 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>
Перейти на страницу:

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

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

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

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

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

Все жанры