尝试将整数值写入 Linux 系统地址
/sys/class/背光/背光/亮度
我正在使用 MonoPosix。我做错了什么,因为错误 Invalid argument [EINVAL] 弹出。也许我没有正确写入值。
我连接动态库:
[DllImport("libc.so.6", EntryPoint = "open")]
public static extern int Open(string fileName, int mode);
[DllImport("libc.so.6", EntryPoint = "fcntl", SetLastError = true)]
private static extern int Fcntl(int fd, int request, int data);
private const string Path = "/sys/class/backlight/backlight/brightness";
private int fd = -1;
接下来,我打开文件:
private void Open()
{
fd = Syscall.open(Path, OpenFlags.O_RDWR);
if (fd < 0)
{
CheckAndThrowUnixIOException();
}
}
我试着写:
public unsafe void WriteValue(int value)
{
Open();
var ret = Fcntl(fd, 1, value); // что - то тут не так
int count;
var data = new char[1];
data[0] = (char) value; // и тут тоже что-то не правильно? Нужно значение в IntPtr.
fixed(char* p = data)
{
count = (int)Syscall.write(fd, p, (ulong) data.Length);
}
if (count < 0)
{
CheckAndThrowUnixIOException(); // Соответственно тут летит ошибка.
}
}
抛出异常方法:
private void CheckAndThrowUnixIOException()
{
var error = Marshal.GetLastWin32Error();
throw new UnixIOException(error);
}
我不知道如何将值写入 sys/class.... 也不清楚如何从 Path 常量中读取地址。
我想通了,有必要将字符串文字作为指针传递: