2
Можно ли как-то позвонить sysctl из приложения на базе Mac на Mac?sysctl от Mono на Mac
Можно ли как-то позвонить sysctl из приложения на базе Mac на Mac?sysctl от Mono на Mac
Конечно, используйте DllImport, как и любую другую функцию C. Вот пример:
using System;
using System.Runtime.InteropServices;
class TestSysctl {
[DllImport ("libc")]
static extern int sysctlbyname (string name, out int int_val, ref IntPtr length, IntPtr newp, IntPtr newlen);
static void Main (string[] args) {
int value;
IntPtr size = (IntPtr)4;
string param = "kern.maxproc";
if (args.Length > 0)
param = args [0];
int res = sysctlbyname (param, out value, ref size, IntPtr.Zero, (IntPtr)0);
Console.WriteLine ("{0}: {1} {2} (res: {3})", param, value, size, res);
}
}
Обратите внимание, что вы должны определить несколько перегруженных для различных типов данных, возвращаемых во втором аргументе (вы, возможно, придется определить соответствующие структур, как они указаны в заголовках).
Спасибо. Есть ли какой-либо Mono/Mac interop каталог, похожий на http://pinvoke.net? Трудно найти правильный маршалинг типа ... – ivan
Я не знаю ни одного такого каталога. Вы можете прочитать о DllImport и P/Invoke на msdn, и у нас есть страница о некоторых особенностях для моно на http://www.mono-project.com/Interop_with_Native_Libraries. – lupus