你如何在Rust中进行进程间通信(IPC)?

Dou*_*oug 11 ipc rust

是否有标准库的一部分?

我一直在挖掘,但我看不到任何立即明显的实现它,或任何东西Process可以让你这样做?

我错过了吗?或者我是否必须为此功能执行一些C-wrapper工作?

(如果是这样,序列化一个对象Send并将其传递给另一个进程是否"安全" ,然后在那里反序列化?那是什么Send意思?)

Vla*_*eev 14

在Rust中没有单一的祝福方式来进行进程间通信.您将需要使用您想要的任何技术:管道,裸套接字(TCP或UDP),共享内存,nanomsg/ZeroMQ等等.

Send并不意味着可以序列它实现它的类型的对象,发送到另一个进程.这意味着数据可以安全地发送到另一个线程(例如,它不包含对源线程堆栈的任何引用),并且它与序列化无关.

例如,IPC的基本形式之一是父进程和子进程之间的stdin/stdout管道. ProcessAPI允许您通过这些管道发送和接收数据:

use std::io::process::Command;

fn main() {
    let mut p = Command::new("tr").arg("a-z").arg("A-Z").spawn().unwrap();

    {
        let mut p_stdin = p.stdin.as_mut().unwrap();
        p_stdin.write_str("hello world").unwrap();
    }
    p.wait().unwrap().success();

    let response = p.stdout.as_mut().unwrap().read_to_string().unwrap();
    println!("Responded: {}", response);
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用套接字,但示例会非常大.您可以在此处找到套接字API文档.