从C#进行glibc系统调用

时间:2015-01-16 04:14:50

标签: c# mono glibc libc

我想从我的Mono应用程序中调用execl()。这是宣言:

[DllImport("libc.so.6")]
private static extern int execl( string path, string argv );

然后,pathnamearguments是标准C#字符串对象:

execl(pathname, pathname + " " + arguments);

execl()调用不起作用,如果我使用perror()获取错误信息,我会看到“错误地址”。

我已经确信Mono / C#会自动将字符串转换为所需的c样式空终止字符串,但我无法使其工作。

从C#/ Mono进行系统调用的正确方法是什么?我应该使用一系列C#的sbyte类型,后跟\0吗?

1 个答案:

答案 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);
}

你在运行什么版本的单声道?您也可以向我们提供调试信息或在某处​​发布跟踪吗?