C# Mono无法访问文件,即使LinuxShell没有root也可以

C# Mono无法访问文件,即使LinuxShell没有root也可以,c#,linux,raspberry-pi,gpio,raspberry-pi-zero,C#,Linux,Raspberry Pi,Gpio,Raspberry Pi Zero,这可能是一个错误的地方问这个问题(但我认为这是正确的地方,因为它涉及编程) 所以我得到了一个树莓皮零为我们的学校项目。我把它放到SSH中,看看它能用它做什么。我对如何使用这张卡上的GPIO引脚做了一些研究。 基本上: $echo 17>/sys/class/gpio/export $echo out>/sys/class/gpio/gpio17/direction $echo 1>/sys/class/gpio/gpio17/value $echo 17>/sys/class/gpio/unex

这可能是一个错误的地方问这个问题(但我认为这是正确的地方,因为它涉及编程)

所以我得到了一个树莓皮零为我们的学校项目。我把它放到SSH中,看看它能用它做什么。我对如何使用这张卡上的GPIO引脚做了一些研究。
基本上:

$echo 17>/sys/class/gpio/export
$echo out>/sys/class/gpio/gpio17/direction
$echo 1>/sys/class/gpio/gpio17/value
$echo 17>/sys/class/gpio/unexport
启用GPIO引脚17并将数字1写入其中,然后“取消端口,无需根目录”。
我还想试试这张卡片上的一些语言。我毫无问题地尝试了python、C#和Rust(尽管Rust编译速度非常慢,但它可以正常工作)。所以我开始用我最喜欢的语言C#和mono。安装它并编译一个basic程序不是什么大事,它可以工作。
所以我写下:

using System;
using System.IO;

namespace Program
{
    public static class Program
    {
        public static void Main()
        {
            if (Directory.Exists("/sys/class/gpio/gpio17/"))
                File.WriteAllText("/sys/class/gpio/unexport", "17");

            File.WriteAllText("/sys/class/gpio/export", "17");
            File.WriteAllText("/sys/class/gpio/gpio17/direction", "out");
            File.WriteAllText("/sys/class/gpio/gpio17/value", "1");
        }
    }
}
基本上,如果发现17针打开,“取消输出”,然后重新输出,设置为输出并写入数字1。
汇编:

mcs program.cs -out:program.exe -debug && ./program.exe
输出:

Unhandled Exception:
System.UnauthorizedAccessException: Access to the path "/sys/class/gpio/gpio17/direction" is
denied.
什么?怎么用?它适用于
sudo mono./program.exe
,不适用于
mono./program.exe

当然,我总是可以使用wiringPi或python,但我对这一个很好奇,找不到答案。这对我来说毫无意义
/sys/class/gpio/gpio17
是一个符号链接,我也尝试访问原始路径,但运气不佳

这里可能有什么问题?

猜测:

  • 你先取消导出它,然后导出它并立即访问它,在过去的几次中,我在一些操作系统e上遇到了问题。G删除一个文件并立即再次创建它,添加一个等待时间(不是真正干净的代码,但如果它工作的话)
  • 使用linux命令“ls-la”或更多命令检查文件/文件夹的差异
  • 通过e从C#调用shell命令,该命令有效。G过程类
  • 有几次Mono无法像Windows上的C#那样工作,必须找到一个解决办法
  • 是否尝试打开指向这些文件的流并使其保持打开状态?或者甚至可以用管道连接这些文件

谢谢你的回答。我也想到了你们的第一个猜测,但当我想得更多的时候,它没有任何意义,因为它与根一起工作。但令我惊讶的是,是的,当我延迟方向指令时,它就起作用了。这尤其有趣,
sudo
是否会使shell命令执行得更快?这可能是唯一的答案。我不是Linux专家,也许使用root会减慢速度,或者作为一个纯粹的猜测,文件访问会被序列化,以防止死锁或其他只有root才能发生的坏事情。使用
libgpiod
及其绑定。不推荐使用GPIO的sysfs接口。