以下の内容はhttps://gfx.hatenadiary.org/entry/20121211/1355240932より取得しました。


MonoでCのstdioを呼び出してみる

MonoはMono.Posixアセンブリを使うとPOSIXの関数を呼び出せるようだ。
そこでCのstdioを使ってcat(1) を実装してみた。

// $ mcs -r:Mono.Posix Cat.cs
using System;
using Mono.Unix.Native;

public class Cat {
    public static void Main(string[] argv) {
        foreach (var file in argv) {
            var fp = Stdlib.fopen(file, "r");
            Int32 c;
            while ( (c = Stdlib.fgetc(fp)) != Stdlib.EOF ) {
                Stdlib.putchar(c);
            }
            Stdlib.fclose(fp);
        }
    }
}

Stdlib.fopen() の戻り値が IntPtr だったりといろいろ不都合はあるものの、呼び出すことができた。

他、malloc()なども含めてCの関数はほぼそのまま呼べる。fread()/fwrite()などもByte[]を介して使える。ただし fork() はプロセス終了処理に不都合があるらしく使うことができない*1

*1:ソースコードをみるとfork()/vfork()だけコメントアウトされている




以上の内容はhttps://gfx.hatenadiary.org/entry/20121211/1355240932より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14