Go 言語は、システム コールを利用して基礎となる言語と対話します。オペレーティング·システム。 syscall パッケージは、システム コールを実行するために必要な機能を提供します。このパッケージ内の 2 つの重要な関数は、Syscall.RawSyscall() と Syscall.Syscall() です。
目的:
方法を提供しますシステム コールを直接実行し、きめ細かい制御が可能です。
パラメータ:
戻り値:
目的:
システムコールを実行し、呼び出し元に代わって下位レベルの詳細の一部を処理するための上位レベルのインターフェイス。
パラメータ:
Syscall.RawSyscall() に似ていますが、最初のパラメータとしてシステム コール名を受け入れます。
戻り値:
2 つの関数の主な違いは、システム コールの実行を処理するアプローチにあります。 Syscall.Syscall() は、ランタイム ライブラリのヘルパー関数を利用して、ブロック操作に入っていることをスケジューラに通知し、スケジューラが別の goroutine またはスレッドに制御を譲ることができるようにします。対照的に、Syscall.RawSyscall() はこの通知を実行しません。つまり、現在の goroutine はシステム コールが完了するまでブロックされます。
Syscall.RawSyscall() の実装Darwin/amd64 のアセンブリは、システム コールの実行に使用される基礎となるアセンブリ命令についての洞察を提供します。
61 TEXT ·RawSyscall(SB),7, 62 MOVQ 16(SP), DI 63 MOVQ 24(SP), SI ... 70 SYSCALL ... 76 ok1: ... 80 RET
zsyscall は、z/OS オペレーティング システムに固有のシステム コールのラッパーを提供する syscall 内のサブパッケージを指します。
独自の syscall 関数を作成する場合、通常は Syscall.Syscall() を使用し、システム コール名と引数をパラメータとして指定します。ただし、より正確な制御が必要な場合、または実行時のオーバーヘッドを回避したい場合は、Syscall.RawSyscall().
を選択できます。以上が## Go では Syscall.RawSyscall() と Syscall.Syscall() のどちらを使用すべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。