2017-12-15 11 views
1

.NET Core 2.0からのlibc呼び出しを使用して、Linuxでシリアルポート機能を使用しています。.NET Core 2.0でerrnoにアクセスするには?

私はこのようなlibc関数をインポートしています。そして、それはこのようなように呼ばれています

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

を:

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

結果変数が含まれます-1読み取り機能が失敗した場合。

失敗した読み込み呼び出しから詳細なエラーコードを取得するには、C#/ .NET Core 2.0からerrno変数にアクセスするにはどうすればよいですか?

+0

正式にerrnoが実際にはCコンパイラのプリプロセッサは、変数へのポインタを返す関数としてそれを書き換えますが、グローバル変数です。この関数の正確な名前に使用するlibcについては、errno.hファイルを調べなければなりません。 '__error()'や 'get_errno()'と似ているはずです。 –

答えて

0

正しいコードは次のようなものです:

int fileDescriptor = Libc.open(deviceName, Libc.OpenFlags.O_RDWR | Libc.OpenFlags.O_NONBLOCK); 
if (fileDescriptor == -1) 
{ 
    var errno = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); 
    ... 
} 
関連する問題