Serial port 如何在.NETCore2.0中访问errno?

Serial port 如何在.NETCore2.0中访问errno?,serial-port,.net-core,Serial Port,.net Core,我正在使用.NETCore2.0中的libc调用来访问Linux上的串行端口功能 我正在像这样导入libc函数: [DllImport("libc")] public static extern int read(int fd, IntPtr buf, int count); int result = Libc.read(fileDescriptor.Value, readingBuffer, READING_BUFFER_SIZE); int fileDescriptor = Libc.o

我正在使用.NETCore2.0中的libc调用来访问Linux上的串行端口功能

我正在像这样导入libc函数:

[DllImport("libc")]
public static extern int read(int fd, IntPtr buf, int count);
int result = Libc.read(fileDescriptor.Value, readingBuffer, READING_BUFFER_SIZE);
int fileDescriptor = Libc.open(deviceName, Libc.OpenFlags.O_RDWR | Libc.OpenFlags.O_NONBLOCK);
if (fileDescriptor == -1)
{
    var errno = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
    ...
}
那就这样叫,

[DllImport("libc")]
public static extern int read(int fd, IntPtr buf, int count);
int result = Libc.read(fileDescriptor.Value, readingBuffer, READING_BUFFER_SIZE);
int fileDescriptor = Libc.open(deviceName, Libc.OpenFlags.O_RDWR | Libc.OpenFlags.O_NONBLOCK);
if (fileDescriptor == -1)
{
    var errno = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
    ...
}
如果读取函数失败,结果变量将包含-1


如何从C#/.NET Core 2.0中获取errno变量,以便从失败的读取调用中获取详细的错误代码?

正确的代码如下所示:

[DllImport("libc")]
public static extern int read(int fd, IntPtr buf, int count);
int result = Libc.read(fileDescriptor.Value, readingBuffer, READING_BUFFER_SIZE);
int fileDescriptor = Libc.open(deviceName, Libc.OpenFlags.O_RDWR | Libc.OpenFlags.O_NONBLOCK);
if (fileDescriptor == -1)
{
    var errno = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
    ...
}

从形式上讲,errno是一个全局变量,实际上,C编译器的预处理器会将其重写为返回变量指针的函数。您必须在errno.h文件中查找用于此函数确切名称的libc,它应该类似于
\u error()
get\u errno()
。由于该方法的名称表明情况并非如此,所以我要指出,它也适用于在类Unix平台上检索平台调用上的
errno