たとえば、 のような標準ライブラリ関数を使用しない場合printf()
、putchar()
どうすれば文字を画面に出力できますか?
それを行う簡単な方法はありますか。私はシステムコールについてあまり知りません。システムコールを使用する必要がある場合、どのように使用すればよいですか? ライブラリ関数を使用せずに印刷する簡単な方法をアドバイスできる人はいますか?
標準 C では、できません。C で定義されている唯一の I/O は、C 標準ライブラリ関数を介したものです。
特定のプラットフォームでは、それを行う方法がある場合があります。
write
C ライブラリを使用せずに、litb を直接呼び出すことができます。C ライブラリのソースを入手して、それがどのように行われているかを確認してください。独自の C ライブラリを作成している場合を除き、なぜこれを行う必要があるのかわかりません。
write
Linux では、システム コールを使用できます。
write(1, "hello\n", 6); // write hello\n to stdout
それが十分に得られない場合は、1 段階下に移動して、syscall を一般的に呼び出すことができます。
syscall(__NR_write, 1, "hello\n", 6);
strace
特定のプログラムの実行中にどのシステムコールが使用されているかを確認するために使用できるについて知っておくとよいでしょう。ただし、「いくつかの単純なパーサー」の場合、生のシステム コールを使用する必要はほとんどないことに注意してください。c ライブラリの関数を使用することをお勧めします。
ところで、c 標準ライブラリを使用せずに Windows で上記を実行する場合は、WriteFile および GetStdHandle 関数に注意してください。ただし、Linux ソリューションのようにはなりません。
質問の下にあるハオ氏からのコメントで、簡単な回答が1つ見つかりました。彼の答えは、このような単純なプログラムです
ターボ C (DOS プログラム):
char far* src = (char far*) 0xB8000000L;
*src = 'M';
src += 2;
*src = 'D';
またはこれを試してみてください: http://en.wikipedia.org/wiki/Brainfuck :) – //Hao (1 時間前)
Turbo Cで試してみましたが、うまくいきました。このような単純な解決策が欲しかったので、正解として受け入れたかったのですが、彼(Hao)がコメントとしてそれを提供したので、他のユーザーが彼に代わってこれについて知ることができるようにここに貼り付けて受け入れました。もう一度、ハオさんに感謝します。