Rust unix domain socket

先用起来再说

rust 复制代码
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)
        }
    };
}

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

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

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

rust 复制代码
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)
        }
    };
}

和python 一样的可用性

也有引用和解引用,但是用起来就比较麻烦

也有指针和原始指针

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

相关推荐
也许明天y3 分钟前
Spring AI 核心原理解析:基于 1.1.4 版本拆解底层架构
java·后端·spring
小红的布丁14 分钟前
BIO、NIO、AIO 与 IO 多路复用:select、poll、epoll 详解
java·数据库·nio
lifallen15 分钟前
Flink Checkpoint 流程、Barrier 流动与 RocksDB 排障
java·大数据·flink
疯狂打码的少年19 分钟前
【Day12 Java转Python】Python工程的“骨架”——模块、包与__name__
java·开发语言·python
希望永不加班24 分钟前
SpringBoot 自定义 Starter:从零开发一个私有 Starter
java·spring boot·后端·spring·mybatis
悟空码字42 分钟前
别再System.out了!这份SpringBoot日志优雅指南,让你告别日志混乱
java·spring boot·后端
一 乐43 分钟前
工会管理|基于springboot + vue工会管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·工会管理系统
callJJ1 小时前
Spring AI ETL 数据处理管道实战指南:从原始文档到向量索引
java·人工智能·spring·ai·etl·spring ai
暗暗别做白日梦1 小时前
Maven 内部 Jar 包私服部署 + 多模块父工程核心配置
java·maven·jar
从零开始的-CodeNinja之路1 小时前
【Redis】Redis 缓存应用、淘汰机制—(四)
java·redis·缓存