• Rust unix domain socket


    先用起来再说

    use std::io::prelude::*;
    use std::os::unix::net::UnixStream;
    
    fn main() {
        let mut stream: UnixStream;
        let mut buffer = vec![0u8; 4096];
        match UnixStream::connect("/tmp/hello.world.serv") {
            Ok(handle) => {
                stream = handle;
                match stream.write_all("cmd=read".as_bytes()) {
                    Ok(_) => {
                        println!("send to unix domain socket successfully");
                        match stream.read(&mut buffer) {
                            Ok(_) => {
                                println!("read uds buffer okay");
                                //This step change utf8 code for recv buffer
                                println!("Content:{:?}", String::from_utf8(buffer));
                            }
                            Err(error) => println!("read uds buffer errors {:?}", error),
                        }
                    }
                    Err(error) => println!("{:?}", error),
                }
            }
            Err(error) => {
                println!("{:?}", error)
            }
        };
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    编写rust 不是看编译时报错,而是更重要的是关注,lsp 返回的语法错误,只要又错误,大概率是不会编译成功的

    rust使用了C的连接器,但是丰富了C 的库,从项目中的小组件开始迭代

    除非,linux 驱动有crates 否则不建议使用 unsafe 去调用

    use std::io::prelude::*;
    use std::os::unix::net::UnixStream;
    
    #[allow(unused_mut)]
    #[allow(non_snake_case)]
    fn main() {
        let mut stream: UnixStream;
        let mut buffer = vec![0u8; 4096];
        let mut cmd = ["cmd=para_list", "cmd=read"];
        let mut cmdVec = cmd.to_vec();
    
        for it in cmdVec.iter_mut() {
            if *it == "cmd=para_list" {
                *it = "cmd=para_all_list";
            } else if it == &"cmd=read" {
                *it = "cmd=read_all_cache";
            }
        }
    
        println!("new static str vec: {:?}", cmdVec);
        match UnixStream::connect("/tmp/uds.network.serv") {
            Ok(handle) => {
                stream = handle;
                match stream.write_all("cmd=read".as_bytes()) {
                    Ok(_) => {
                        println!("send to unix domain socket successfully");
                        match stream.read(&mut buffer) {
                            Ok(_) => {
                                println!("read uds buffer okay");
                                //This step change utf8 code for recv buffer
                                println!("Content:{:?}", String::from_utf8(buffer));
                            }
                            Err(error) => println!("read uds buffer errors {:?}", error),
                        }
                    }
                    Err(error) => println!("{:?}", error),
                }
            }
            Err(error) => {
                println!("{:?}", error)
            }
        };
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    和python 一样的可用性
    也有引用和解引用,但是用起来就比较麻烦

    也有指针和原始指针

    不考虑复杂的过程宏和装饰器的作用大差不差

  • 相关阅读:
    海外服务器相较于国内服务器有何特点?亚马逊海外服务器为何零跑全球
    2022最新JUC+多线程面试题
    尚硅谷Flink(二)DStream API
    Jenkins :添加node权限获取凭据、执行命令
    2023年4月到7月工作经历
    找实习之从0开始的后端学习日记【9.14】
    PLC中获取输入信号上升沿或下降沿的具体方法示例
    【深度学习实验】前馈神经网络(二):使用PyTorch实现不同激活函数(logistic、tanh、relu、leaky_relu)
    【枚举区间+线段树】CF Ehu 152 E
    Android 应用程序文件目录数据清理的时机
  • 原文地址:https://blog.csdn.net/weixin_45647912/article/details/134505525