libc を使用せずに入力または印刷出力を取得するにはどうすればよいですか? システムコールを使用できますが、それが役立つかどうかはわかりませんでした。
2 に答える
これを行うプラットフォームに依存しない方法はありません。実際、持つことの全体的なポイントはlibc
、ほとんどのシステムが提供する一連の機能への共通のインターフェースを持つことですが、根本的に異なる方法でそれを行います。
おそらく最善の選択肢は、現在使用しているシステムのドキュメントを参照することです。OS の一連の割り込みを検索し、asm
キーワードを使用して、OS に入力の読み取りまたは出力の表示を指示するアセンブリ命令を記述してみてください。ファイル記述子で入出力を行うために OS が提供するライブラリを調べて、代わりにそれらの関数を使用することができます。または、プロセス作成ライブラリを見て、プロセスを生成してコンソールからデータを読み書きすることもできます。ここで、2 番目のプログラムはlibc
. ただし、これらのいずれも移植性が保証されているわけではありません。
お役に立てれば!
write(2)
システム コール ABI がどのように機能するかを理解するために、gdb を試してみました。
とにかく、libcはまったくありません。特別なトリックがなければ、cc(1) コンパイラ/リンカー フロントエンドは libc とリンクしますが、それを何にも使用しないことに注意してください。C ランタイムの起動コードはいくつかの libc 呼び出しを行いますが、このプログラムは行いません。
void mywrite(int fd, const void *b, int c) {
asm("movl $1, %eax");
asm("syscall");
}
int main(void) { const char *s = "Hello world.\n"; return mywrite(1, s, 13), 0; }