rust gio-rs 挂载 samba 磁盘

embedded/2024/10/9 1:46:16/

linux 使用的 gio 管理工具
这个工具如下

这是 gio 的rust版本 https://crates.io/crates/gio

可以用 rust 语言实现下面所有操作

gio mout 挂载 samba 如下

rust">//https://valadoc.org/gio-2.0/GLib.MountOperation.html
pub async  fn gio_mount(uri路径:&str, 用户名:Option<&str>, 密码:Option<&str>, 工作域:Option<&str> )->anyhow::Result<()>{println!("gio_mount 挂载: {:?} {:?}", uri路径,  用户名);let 文件 = gio::File::for_parse_name(uri路径); let uri = 文件.uri().to_string();if &uri[0..6] == "smb://"{let mount操作 = gio::MountOperation::new();mount操作.set_username(用户名);mount操作.set_domain(Some(密码.unwrap_or("WORKGROUP")));mount操作.set_password(密码); let 尝试次数  = std::sync::Arc::new(std::sync::Mutex::new(0));   //共享且可修改let 尝试次数_clone = 尝试次数.clone();mount操作.connect_ask_password(move|操作,b,c,d,需求标志|{ // println!("{:?}  {:?}  {:?}  {:?}" ,b,c,d, 需求标志); let mut 次数 = 尝试次数_clone.lock().unwrap();                //取出共享变量*次数 += 1;                                                                       if *次数 <= 2{println!("gio_mount 尝试挂载次数  {:?}" ,*次数); 操作.reply(gio::MountOperationResult::Handled);                        //这个相当于回车键}else{操作.reply(gio::MountOperationResult::Unhandled);                      //这个中断操作} });文件.mount_enclosing_volume_future(gio::MountMountFlags::NONE,Some(&mount操作) ).await?;}else if &uri[0..7] == "file://"{ }else{ return Err(MyErr::错误(format!("gio_mount 无法识别协议 -> {}", uri)).into()); }  Ok(())
}

一些c函数

g_file_mount_enclosing_volume_finish
g_file_mount_enclosing_volumeg_mount_operation_new
lwl@lwleen:~/Desktop$ gio --help
用法:gio 命令 [参数…]命令:help     打印帮助version  打印版本cat      串接文件,写到标准输出copy     复制文件info     显示关于位置的信息launch   从桌面文件启动应用程序list     列出某位置的内容mime     获取或设置某种 MIME 类型的处理程序mkdir    创建目录monitor  监视文件和目录的更改mount    挂载或卸载位置move     移动文件open     用默认应用打开文件rename   重命名文件remove   删除文件save     从标准输入读取并保存set      设置文件属性trash    移动文件或目录到回收站tree     在树中列出某位置的内容使用 “gio help COMMAND” 以获取详细帮助。
lwl@lwleen:~/Desktop$ ``

http://www.ppmy.cn/embedded/124818.html

相关文章

OpenStack Yoga版安装笔记(十五)Horizon安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

WPF下使用FreeRedis操作RedisStream实现简单的消息队列

Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。 阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据…

APP自动化搭建与应用

APP自动化环境搭建 用于做APP端UI自动化&#xff0c;adb连接手机设备。 需要的工具java编辑器&#xff1a;jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步&#xff1a;安装sdk&#xff0c;里面包含建立工具bu…

String、StringBuilder

internal class Mainclus { internal static void Main(string[] args) { //创建方式 string a = "*world"; string new1 = "hello*world"; string new2 = "hello" + "*world"; …

17 链表——21. 合并两个有序链表 ★

17 链表 21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 算法设计: 合并两个有序链表,并保持有序性,可以采用迭代法和递归法两种…

283。移动零

题目:283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 思路:将非0数移动到前面&#xff0c;后面的直接用0赋值 代码: class Solution { public:void moveZeroes(vector<int>& nums) {int slow 0;for(int fast 0 ; fast <nums.size(); fast){if(nums[fas…

docker进入正在运行的容器,exit后的比较

docker run进去容器&#xff0c;exit退出&#xff0c;容器停止 run运行进去容器&#xff0c;ctrlpq退出&#xff0c;容器不停止。如果加了-d,就守护式启动容器&#xff0c;exit的命令&#xff0c;容器是不会停止的 exec进的容器&#xff0c;exit或者是ctrld,容器不会停止.只是…

IDEA的lombok插件不生效了?!!

记录一下&#xff0c;防止找不到解决方案&#xff0c;已经遇到好几次了 前面啰嗦的多&#xff0c;可以直接跳到末尾的解决方法&#xff0c;点击一下 问题现场情况 排查过程 确认引入的依赖正常 —》&#x1f197; idea 是否安装了lombok插件 --》&#x1f197; 貌似没有问题…