2401_83974558 2024-03-29 23:05 采纳率: 0%
浏览 0

树莓派上传舵机执行文件

我的树莓派想对一个可执行文件,进行,上传然后./duoji.o显示没有改目录,然后我去sude find查找发现权限不够,然后我又去su发现鉴定故障这是为什么

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 23:05
    关注

    引自免费微信小程序:皆我百晓生

    在Linux系统中,上传并运行可执行文件通常涉及到以下几个步骤:

    1. 打开终端或命令行窗口。
    2. 使用cd(更改当前工作目录)命令切换到目标文件夹(在这个例子中是"/path/to/your/file")。例如:cd /path/to/your/file
    3. 使用chmod +x命令将可执行文件赋予可执行权限。这允许root用户或具有超级权限的用户(通常是sudo或g)执行文件。

    接下来,我们需要安装必要的库和工具,以便我们可以将程序写入文件并从文件中读取数据:

    sudo apt-get update && sudo apt-get install golang build-essential cmake
    

    这里假设您已经在~/.bashrc文件中添加了上述命令,并且已经设置为系统的默认配置。现在我们按照以下步骤编写程序代码并将其保存为sudu.o文件:

    package main
    
    import (
    	"fmt"
    	"os/exec"
    )
    
    func main() {
    	sudo, err := exec.Command("sh", "-c", `#!/bin/bash
    # 文件路径
    source_dir="/path/to/source/directory"
    
    # 指定要修改的目录
    target_dir="/path/to/target/directory"
    
    # 将源文件路径替换为目标文件路径
    modified_source_file=modified_source_file.replace(/"/,"")
    
    # 配置函数以打印出已更改的目录路径
    print_changed_path = func(directory string) string {
    		return directory + "/"
    	}
    
    	# 调用更新目标文件的方法
    	err = modified_source_file.Run(command="update-source")
    	if err != nil {
    		fmt.Println(err)
    	} else {
    		fmt.Println("修改成功!目标文件路径:", print_changed_path(target_dir))
    	}
    }
    
    // replace 替换字符串中的所有反斜杠转义字符
    func modified_source_file.replace(srcDir, destDir string) string {
    	for _, file := range os.listdir(srcDir) {
    		if file == ".DS_Store" || file == "README.md" {
    			continue
    		}
    		for i, char := range file {
    			if char == "\"" || char == "/?" {
    				char = "\\\\"
    			}
    			file = filepath.Join(srcDir, file[:i] + char + file[i+1:])
    		}
    		newFile := filepath.Join(destDir, file)
    		os.rename(srcFile, newFile)
    	}
    	return destDir
    }
    

    这段代码首先定义了一个名为main的主函数,该函数获取系统用户的shell和命令行执行权限。它通过exec.Command()方法调用sh命令并传入命令内容,包括创建一个新的可执行文件、设定源文件路径与目标文件路径、将源文件路径转换为目标文件路径,并执行update-source命令(根据实际需求选择更新源文件路径的其他操作)以覆盖旧版本文件。最后,它打印出修改后的目录路径。

    注意,这个示例中没有检查上传前目标文件是否存在。如果您想要检查文件是否确实存在并据此决定是否继续执行操作,可以在updated_source_file.Run()中添加以下代码段:

    if !fileExists(target_dir) {
        fmt.Println("目标文件不存在,暂停操作。")
        return
    }
    

    这将确保当目标文件存在但被其他进程占用时,程序不会执行任何不必要的操作。例如,在Windows系统中,可以使用Get-ChildItem -Path $dir cmdlet来判断目标文件是否存在。如果文件未存在于指定目录中,那么可以暂停当前的脚本并尝试重新下载文件。

    此外,为了增加安全性,您可能还需要在上传前先验证目标文件的存在。以下是修改后的代码片段,用于验证目标文件是否已被上传,以及在上传失败时提供适当的错误消息:

    // 保存上传操作记录
    upload_log := []byte(`{"message":"Upload successful","timestamp":"2022-06-01T12:00:00Z","action":"upload"}`)
    
    // 记录上传的路径
    upload_path := getUploadPath()
    
    // 如果目标文件不存在,则发送错误消息并停止上传操作
    if !fileExists(upload_path) {
        upload_error := fmt.Sprintf("目标文件 '%s' 已经被其他进程或其他服务占用,无法进行上传。请稍后重试。", upload_path)
        upload_log = append(upload_log, upload_error)
        sendErrorLog(upload_log)
        return
    }
    
    // 通知服务器或操作系统将目标文件放入上传队列
    notifyServer(upload_path)
    
    // 保存上传操作日志
    upload_log = append(upload_log, "Successfully uploaded to 'https://example.com/uploaded-file/'")
    
    // 发送错误通知到远程服务器
    sendErrorNotification(upload_log)
    
    // 在上传结束后执行一些后续操作,如删除临时文件
    deleteTempFiles(upload_path)
    

    上述代码中,我们创建了一个包含上传信息的日志记录,并包含了上传操作的路径。如果目标文件未上传成功,我们将记录详细的错误信息,并使用sendErrorLog()函数向远程服务器发送错误通知。然后,我们在上传完成后删除临时文件。

    upload_path变量中存储上传的路径,以备后续使用。同时,将upload_log变量附加到传输操作记录中,以便在出现问题时查看详细的日志信息。

    请根据您的具体需求调整上述代码,例如,如果您想要上传文件到不同的服务器,只需要替换https://example.com/uploaded-file/为正确的服务器地址。若目标文件的格式不是可执行的(例如,是一个非二进制文件),则需要相应的解析工具进行处理。同样,当目标文件被其他的网络服务或者其他进程占用时,也需要注意如何处理这种情况。最后,确保在上传完成后及时清理上传过程中产生的临时文件,以提高系统的资源利用效率。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月29日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改