2013-03-27 6 views
6

何らかの理由で、システムの一部のシステムコールを呼び出す必要があります(Linux) 'syscall'パッケージのドキュメントをチェックしましたが、 。golangのLinux/UNIXのシステムコールを呼び出すにはどうすればいいですか

次に、ウィンドウapiをラップするプロジェクト(https://github.com/AllenDang/w32/blob/master/kernel32.go)を見ました。私はそれのソースコードを少し読んでいます。

それは動的ライブラリをロードするために

modkernel32 = syscall.NewLazyDLL("kernel32.dll") 

を使用しています。しかし、関数NewLazyDLL()のドキュメントはありません

Linux/UNIXの場合と同様の機能があるはずです。いずれかの人が教えてください 私は関数の名前またはGolangのLinuxのシステムコールを呼び出す方法または libc.soからのロード関数?

詳細

私は図書館がそれらを提供golang見つけることができないため、システムコール「デーモン」や「フォーク」を(私は、プロセスをデーモン化したい)を起動します。

+0

正確に何をしますか? 'syscall'パッケージはダイレクトシステムコールインターフェースの正しいパッケージですが、あなたがしたいことを知らずにアドバイスをするのは難しいです。しかし、UNIX版のパッケージではシステムコールインタフェースの一部ではないので、DLLのロードは見つからないでしょう。 –

+0

あなたのreply.Actuallyのためのジェームズありがとう私はちょうど私がシステムコールインターフェイスを得ることができる方法を知りたい。 –

答えて

4

現時点では、Go標準ライブラリには、daemonスタイル関数はありません。 an open bug about adding such a featureがありますが、Go 1.1リリースの後まで延期されています。バグレポートを読むのは、最初に表示されるほど単純ではない理由のいくつかについてお勧めします。

デーモンプロセスを実行するには、デーモンフォーク自体とは別の方法があります。 UpstartやSystemdのような現代のinitデーモンは、あなたのためにそのようなデーモンプロセスを管理することができます。

+0

Jamesに感謝します。自分のプログラムでfork/daemonを使用することはしませんが、私はunixのシステムコールをどのように呼び出すことができるのでしょうか?私は、Syscall/Syscall6と呼ばれる2つの機能があることを発見しましたが、そのためのドキュメントはありません。これら2つの関数は、UNIXのシステムコールを呼び出すために使用できますか? –

+0

'systemcall'パッケージの関数は、あなたの質問で正しく推測されるように、ほとんどのシステムコールへのアクセスを提供します。たとえば、 'syscall.Read'は' SYS_read'システムコールを呼び出します。後の特定のシステムコールがパッケージでカバーされていない場合は、具体的に質問してください。上記の答えは、プロセスのデーモン化についての具体的な質問をカバーしています。 –

+0

syscallパッケージは、使用しているプラ​​ットフォームのすべてのシステムコールを(ほぼ)公開します。このパッケージの内容はプラットフォームによって異なります。 foo_linux.goやfoo_windows.goなどのプラットフォーム接尾辞を持つソースファイルを使用します。 go buildは、接尾辞が一致するファイルのみをコンパイルします。これは、プラットフォームに依存するコードを除外するうまくクリーンな方法です。 – fuz

関連する問題