我有一個C函數通過cgo調用Go例程。我需要去例行程序正確設置errno,以便C線程可以檢查它是錯誤的,並採取相應的行動。無法谷歌如何設置通過去errno我如何設置errno來自
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
你不能直接參考去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. 如何設置errno值?
- 2. getpwuid不設置errno
- 3. 如何定義我自己的errno值?
- 4. 我們如何設置來自C#的Excel圖表的位置?
- 5. mq_unlink設置errno到EEXIST
- 6. readlink將errno設置爲ENOENT
- 7. 我如何設置我自己的SVN
- 8. 如何設置來自sharedprefs的textview
- 9. 如何設置我的環境來構建自己的ril庫?
- 10. 如何設置(SWIFT)UIBarButtonSystemItem自我類
- 11. 我如何設置我的wamp以允許來自其他域的請求
- 12. 如何設置TimeTime來監聽來自window.postMessage的消息?
- 13. 如何設置ImageView在dpi的位置來自android api 8?
- 14. stdio是否總是設置errno?
- 15. cudaMalloc設置errno儘管返回cudaSuccess
- 16. 在gdb上設置errno的觀察點
- 17. ioctl返回-1與errno設置爲EPERM
- 18. 爲什麼設置errno爲22:mq_open()POSIX
- 19. 可以在成功時設置errno嗎?
- 20. 爲什麼我需要設置IsRequired如果它來自課堂?
- 21. 我已經設置如何設置laravel
- 22. 來自InstallShield配置文件的設置
- 23. 如何在Java(1.7版)中設置「郵件來自」和「信封來自」
- 24. 如何設置Nginx配置來重新生成我的子域
- 25. 來自地圖的同步設置或來自同步地圖的設置?
- 26. 如何設置自舉行
- 27. 如何設置自動BufferSize?
- 28. 我該如何使用CSS來設置我的.ejs文件?
- 29. 選擇框如何設置設置的第一個值當值來自分區
- 30. 我應該設置一個顏色的值來自RGB或來自Heex xamarin