私はcgoを介してGoルーチンを呼び出すC関数を持っています。 Cスレッドがerrnoを検査し、それに応じて動作できるように、errnoを正しく設定するルーチンを実行する必要があります。 Go経由でerrnoを設定する方法についてはGoogleにアクセスできないどのようにしてerrnoをGoから設定するのですか
2
A
答えて
3
明確にするために、cgo経由で呼び出すC関数を使用して設定することもできます。私のシステムで
package main
// #include <errno.h>
// #include <stdio.h>
//
// void setErrno(int err) {
// errno = err;
// }
//
import "C"
func main() {
C.setErrno(C.EACCES)
C.perror(C.CString("error detected"))
C.setErrno(C.EDOM)
C.perror(C.CString("error detected"))
C.setErrno(C.ERANGE)
C.perror(C.CString("error detected"))
}
それは
error detected: Permission denied
error detected: Numerical argument out of domain
error detected: Numerical result out of range
を出力
2
gorから直接errnoを参照することはできません。cgo doesn't like errno on Linuxを参照してください。そのスレッドから:
私が間違っているのか分からないが、それはとにかくerrnoの 安全な使用ではありませんので、それは問題ではありません。 Cへのすべての呼び出しは、異なるOSスレッド で発生する可能性があります。つまり、errnoを直接参照することは、 であり、必要な値を取得することが保証されていません。
3880041のよう試みは、エラーメッセージを誘発するC.errno
を参照する:
cannot refer to errno directly; see documentation
pointed out in another answerように、機能が働くCからそれを設定します。
関連する問題
- 1. MFMailComposeViewControllerからどのように設定するのですか?
- 2. Goで定数はどのように機能しますか?
- 3. IntelliJ 9.04のXmx設定をどのようにしたらよいですか?
- 4. Bespin Embeddedをどのように設定するのですか?
- 5. jqGrid - jsonreaderをどのように設定するのですか?
- 6. どのように 'Gems' gemを設定するのですか
- 7. どのようにしてOTRS APIから "Send To"オプションをTickedCreateに設定するのですか
- 8. GOでスライスはどのように機能しますか?
- 9. `fmt.Println`はGoでどのように動作しますか?
- 10. Go - ポインタパラメータの値をどのように変更しますか?
- 11. どのようにxbuildから署名のIDを設定しますか?
- 12. Laravel 5.3のテーブルデータからドロップダウンボックスをどのように設定しますか?
- 13. どのようにVMのホストプロキシ設定をC#から使用するように強制できますか?
- 14. WIX 3.x:powershellのカスタム設定からプロパティを設定するにはどうしたらいいですか?
- 15. SSISでコマンドタイムアウトをどのように設定しますか?
- 16. どのように角度でクッキーを設定しますか?
- 17. MongoMapper 0.11をMONGOHQ_URLでどのように設定しますか?
- 18. PhproxyでプロキシIPをどのように設定しますか?
- 19. TDBCtrlGridでPanelHeightをどのように設定しますか?
- 20. Railsでどのように言語を設定しますか?
- 21. node.js jasmineでどのようにブレークポイントを設定しますか?
- 22. applicationIconBadgeNumberをscheduleLocalNotificationでどのように設定しますか?
- 23. どのようにOSXでキャッシュプロキシを設定しますか?
- 24. RunWorkerCompletedEventArgsオブジェクトでUserStateをどのように設定しますか?
- 25. GDBデバッグフラグをcmakeでどのように設定しますか?
- 26. SwiftではどのようにAutoreleasingUnsafeMutablePointerを設定しますか?
- 27. dlopen()はerrnoを設定していますか?
- 28. fmtを使用してGoで定数uint64を印刷するにはどうすればよいですか?
- 29. どのようにしてvcprojファイルのプロパティをcmakeで設定しますか?
- 30. Goのopenpgpパッケージはどのように使用しますか?