48

read()Unix でシステム コールを使用してユーザー入力を読み取るには、どのような方法がありますか。を使用して標準入力からバイト単位で読み取るにはどうすればよいread()ですか?

4

2 に答える 2

51

次のようにして 10 バイトを読み取ることができます。

char buffer[10];
read(STDIN_FILENO, buffer, 10);

read()は、文字列にするために追加して終了しないことを覚えておいてください ('\0'生のバッファを与えるだけです)。

一度に 1 バイトを読み取るには:

char ch;
while(read(STDIN_FILENO, &ch, 1) > 0)
{
 //do stuff
}

#include <unistd.h>このファイルでマクロとしてSTDIN_FILENO定義されていることを忘れないでください。

3 つの標準ストリームに対応する 3 つの標準 POSIX ファイル記述子があり、おそらくすべてのプロセスが持つ必要があります。

Integer value   Name
       0        Standard input (stdin)
       1        Standard output (stdout)
       2        Standard error (stderr)

したがって、代わりにSTDIN_FILENO0 を使用できます。

編集:
Linux システムでは、次のコマンドを使用してこれを見つけることができます。

$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define   STDIN_FILENO    0   /* Standard input.  */

コメントに注意/* Standard input. */

于 2013-04-08T15:52:23.510 に答える