通過.net core調(diào)用so文件的方法
如何通過.net core調(diào)用so文件
工作中需要在linux上監(jiān)控系統(tǒng)空閑時(shí)間,但是沒有找到C#代碼,只找到C的代碼,所以準(zhǔn)備將C文件編譯為so然后用P/invoke調(diào)用。
代碼
C代碼和編譯
#include <X11/extensions/scrnsaver.h> #include <stdio.h> int main(void) { printf("%u\n", getIdleTime()); } int getIdleTime(){ Display *dpy = XOpenDisplay(NULL); if (!dpy) { return(1); } XScreenSaverInfo *info = XScreenSaverAllocInfo(); XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info); return info->idle; }
要編譯上述代碼需要先安裝libX11-devel庫(kù)
編譯命令:
gcc getIdle.c -fPIC -shared -o getIdle.so -lXss -lX11
C#代碼
internal class Program { [DllImport("getIdle.so", EntryPoint = "getIdleTime")] private static extern IntPtr getIdleTime(); static void Main(string[] args) { var after = DateTime.Now.AddSeconds(10); while (after >= DateTime.Now) { Console.WriteLine(GetIdleTime()); Thread.Sleep(1000); } } /// <summary> /// 調(diào)用getIdle.so獲取系統(tǒng)空閑時(shí)間 /// </summary> /// <returns></returns> internal static int GetIdleTime() { return getIdleTime().ToInt32(); } }
編譯生成后,將程序文件夾中的文件復(fù)制到linux上,并將so文件放到程序目錄下。使用bashdotnet Test.dll
命令運(yùn)行程序,可以看到能夠正常調(diào)用so文件。
到此這篇關(guān)于如何通過.net core調(diào)用so文件的文章就介紹到這了,更多相關(guān).net core調(diào)用so文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET下使用WScript.Shell執(zhí)行命令
ASP.NET下有自己的執(zhí)行CMD命令的方式,這里用WScript.Shell似有畫蛇添足之嫌,但是我們也不能排除真的有機(jī)器禁用了.NET的相關(guān)類,未雨綢繆嘛。當(dāng)然也不僅僅局限于WScript.Shell,只要是ASP中能用的組件,統(tǒng)統(tǒng)都可以用于ASP.NET中,而且還更方便!2008-05-05asp.net 漢字轉(zhuǎn)換拼音及首字母實(shí)現(xiàn)代碼
asp.net 漢字轉(zhuǎn)換拼音及首字母實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-12-12ASP.NET通用權(quán)限驗(yàn)證的實(shí)現(xiàn)代碼思路
這篇文章主要介紹了ASP.NET通用權(quán)限驗(yàn)證的實(shí)現(xiàn)代碼思路,需要的朋友可以參考下2015-12-12asp.net利用HttpModule實(shí)現(xiàn)防sql注入
關(guān)于sql注入,已經(jīng)被很多人討論過了。這篇沒有新意功能也不夠通用,nnd,不想引起口水,就是覺得簡(jiǎn)單而且思路有參考性才貼出來。2009-12-12.NET?Core內(nèi)存結(jié)構(gòu)體系(Windows環(huán)境)底層原理解析
文章介紹了物理內(nèi)存和虛擬內(nèi)存的區(qū)別,以及Windows系統(tǒng)中虛擬內(nèi)存的管理方式,物理內(nèi)存是計(jì)算機(jī)硬件中的實(shí)際RAM,而虛擬內(nèi)存是由操作系統(tǒng)管理的抽象內(nèi)存層,感興趣的朋友一起看看吧2025-02-02asp.net用url重寫URLReWriter實(shí)現(xiàn)任意二級(jí)域名
Asp.net 用url重寫(URLReWriter)實(shí)現(xiàn)任意二級(jí)域名2008-10-10淺談ASP.Net Core WebApi幾種版本控制對(duì)比
這篇文章主要介紹了淺談ASP.Net Core WebApi幾種版本控制對(duì)比,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09