我想从我的Mono应用程序中调用execl()
。这是宣言:
[DllImport("libc.so.6")]
private static extern int execl( string path, string argv );
然后,pathname
和arguments
是标准C#字符串对象:
execl(pathname, pathname + " " + arguments);
execl()
调用不起作用,如果我使用perror()
获取错误信息,我会看到“错误地址”。
我已经确信Mono / C#会自动将字符串转换为所需的c样式空终止字符串,但我无法使其工作。
从C#/ Mono进行系统调用的正确方法是什么?我应该使用一系列C#的sbyte
类型,后跟\0
吗?
答案 0 :(得分:2)
在我的x64系统上
Linux DNA-NOTEBOOK 3.18.2-2-ARCH#1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU / Linux
Mono JIT编译器版本3.12.0(tarball Thu Jan 15 18:46:56 UTC 2015年)。
以下代码运行良好
[DllImport("libc.so.6")]
private static extern int execl(
[MarshalAs(UnmanagedType.LPTStr)] string path,
[MarshalAs(UnmanagedType.LPTStr)] string argv);
public static void Main()
{
execl("/usr/bin/bash", string.Empty);
}
你在运行什么版本的单声道?您也可以向我们提供调试信息或在某处发布跟踪吗?