2017-12-15 17 views
1

Ich benutze libc-Aufrufe von .NET Core 2.0, um zu seriellen Port-Funktionalität auf Linux zu bekommen.Wie komme ich zu .NET in .NET Core 2.0?

ich den Import der libc-Funktionen wie folgt aus:

[DllImport("libc")] 
public static extern int read(int fd, IntPtr buf, int count); 

Dann wie so aufgerufen es:

int result = Libc.read(fileDescriptor.Value, readingBuffer, READING_BUFFER_SIZE); 

Das Ergebnis Variable enthalten -1, wenn die Lesefunktionen fehlschlägt.

Wie kann ich von C#/.NET Core 2.0 auf die Variable errno zugreifen, um den detaillierten Fehlercode des fehlgeschlagenen Leseaufrufs zu erhalten?

+0

Formal errno ist eine globale Variable, die Prä-Prozessor von einem C-Compiler in der Praxis wird es als eine Funktion neu zu schreiben, die einen Zeiger auf die Variable zurückgibt. Sie müssen in der Datei errno.h nach der libc suchen, die Sie für den genauen Namen dieser Funktion verwenden, sie sollte "__error()" oder "get_errno()" ähneln –

Antwort

0

Der richtige Code ist so etwas wie dieses:

int fileDescriptor = Libc.open(deviceName, Libc.OpenFlags.O_RDWR | Libc.OpenFlags.O_NONBLOCK); 
if (fileDescriptor == -1) 
{ 
    var errno = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); 
    ... 
} 
Verwandte Themen